

# `ALTER SEQUENCE`
<a name="alter-sequence-syntax-support"></a>

`ALTER SEQUENCE` - 시퀀스 생성기의 정의를 변경합니다.

**중요**  
시퀀스를 사용할 때는 캐시 값을 신중하게 고려해야 합니다. 자세한 내용은 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 페이지의 중요 안내를 참조하세요.  
워크로드 패턴을 기반으로 시퀀스를 가장 잘 사용하는 방법에 대한 지침은 [시퀀스 및 자격 증명 열 작업](sequences-identity-columns-working-with.md) 섹션을 참조하세요.

## 지원되는 구문
<a name="alter-sequence-supported-syntax"></a>

```
ALTER SEQUENCE [ IF EXISTS ] name
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ]
    [ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

where cache is 1 or cache >= 65536
```

## 설명
<a name="alter-sequence-description"></a>

`ALTER SEQUENCE`는 기존 시퀀스 생성기의 파라미터를 변경합니다. `ALTER SEQUENCE` 명령에 구체적으로 설정되지 않은 파라미터는 이전 설정을 유지합니다.

`ALTER SEQUENCE`를 사용하려면 시퀀스를 소유해야 합니다. 시퀀스의 스키마를 변경하려면 새 스키마에 대한 `CREATE` 권한도 있어야 합니다. 소유자를 변경하려면 새 소유 역할에 `SET ROLE`을 수행할 수 있어야 하며 해당 역할에 시퀀스의 스키마에 대한 `CREATE` 권한이 있어야 합니다. (이러한 제한은 소유자를 변경해도 시퀀스를 삭제하고 다시 생성하여 수행할 수 없는 작업은 수행하지 않도록 강제합니다. 그러나 수퍼유저는 어떤 시퀀스의 소유권도 변경할 수 있습니다.)

## 파라미터
<a name="alter-sequence-parameters"></a>

***이름***  
변경할 시퀀스의 이름(선택적으로 스키마 한정자 포함)입니다.

**`IF EXISTS`**  
시퀀스가 없는 경우 오류가 발생하지 않습니다. 이 경우 알림이 발행됩니다.

***increment***  
`INCREMENT BY increment` 절은 선택 사항입니다. 양수 값은 오름차순 시퀀스를 만들고, 음수 값은 내림차순 시퀀스를 만듭니다. 지정하지 않으면 이전 증분 값이 유지됩니다.

***minvalue* / `NO MINVALUE`**  
선택적 절 `MINVALUE minvalue`는 시퀀스가 생성할 수 있는 최솟값을 결정합니다. `NO MINVALUE`를 지정하면 오름차순 및 내림차순 시퀀스에 대해 1 및 해당 데이터 형식의 최솟값이 기본값으로 각각 사용됩니다. 두 옵션을 모두 지정하지 않으면 현재 최솟값이 유지됩니다.

***maxvalue* / `NO MAXVALUE`**  
선택적 절 `MAXVALUE maxvalue`는 시퀀스의 최댓값을 결정합니다. `NO MAXVALUE`를 지정하면 오름차순 및 내림차순 시퀀스에 대해 해당 데이터 형식의 최댓값과 -1이 기본값으로 각각 사용됩니다. 두 옵션을 모두 지정하지 않으면 현재 최댓값이 유지됩니다.

**`CYCLE`**  
선택적 `CYCLE` 키워드를 사용하여 각각 오름차순 또는 내림차순 시퀀스에 의해 *maxvalue* 또는 *minvalue*에 도달했을 때 시퀀스를 래핑할 수 있습니다. 한도에 도달하면 생성되는 다음 숫자는 각각 *minvalue* 또는 *maxvalue*가 됩니다.

**`NO CYCLE`**  
선택적 `NO CYCLE` 키워드가 지정된 경우 시퀀스가 최댓값에 도달한 후 `nextval`을 직접적으로 호출하면 오류가 반환됩니다. `CYCLE` 및 `NO CYCLE`를 모두 지정하지 않으면 이전 주기 동작이 유지됩니다.

***시작***  
선택적 절 `START WITH start`는 시퀀스의 기록된 시작 값을 변경합니다. 이는 현재 시퀀스 값에 영향을 주지 않으며, 향후 `ALTER SEQUENCE RESTART` 명령에서 사용할 값을 설정하기만 합니다.

***재시작***  
선택적 절 `RESTART [ WITH restart ]`는 시퀀스의 현재 값을 변경합니다. 이는 `is_called` = `false`로 `setval` 함수를 직접적으로 호출하는 것과 유사합니다. 지정된 값은 `nextval`의 다음 직접 호출에 의해 반환됩니다. *restart* 값 없이 `RESTART`를 쓰는 것은 `CREATE SEQUENCE`에서 기록했거나 `ALTER SEQUENCE START WITH`에서 마지막으로 설정한 시작 값을 제공하는 것과 같습니다.  
`setval` 직접 호출과 달리 시퀀스에 대한 `RESTART` 작업은 트랜잭션이며 동시 트랜잭션이 동일한 시퀀스에서 번호를 얻는 것을 차단합니다. 원하는 작업 모드가 아닌 경우 `setval`을 사용해야 합니다.

***cache***  
절 `CACHE cache`를 사용하면 더 빠른 액세스를 위해 시퀀스 번호를 미리 할당하고 메모리에 저장할 수 있습니다. 값은 1이거나 65,536 이상이어야 합니다. 지정하지 않으면 이전 캐시 값이 유지됩니다. 캐시 동작에 대한 자세한 내용은 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 아래의 지침을 참조하세요.

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
`OWNED BY` 옵션을 사용하면 시퀀스가 특정 테이블 열과 연결되므로 해당 열(또는 전체 테이블)이 삭제되면 시퀀스도 자동으로 삭제됩니다. 지정된 경우 이 연결은 시퀀스에 대해 이전에 지정된 연결을 대체합니다. 지정된 테이블은 소유자가 동일해야 하며 시퀀스와 동일한 스키마에 있어야 합니다. `OWNED BY NONE`를 지정하면 기존 연결이 제거되어 시퀀스가 ‘독립적으로 존재하는 상태’가 됩니다.

***new\$1owner***  
새 시퀀스 소유자의 사용자 이름입니다.

***new\$1name***  
시퀀스의 새 이름입니다.

***new\$1schema***  
시퀀스의 새 스키마입니다.

## 참고
<a name="alter-sequence-notes"></a>

`ALTER SEQUENCE`는 사전 할당된(캐싱된) 시퀀스 값이 있는 현재 백엔드를 제외하면 백엔드의 `nextval` 결과에 즉시 영향을 미치지 않습니다. 변경된 시퀀스 생성 파라미터를 확인하기 전에 캐시된 모든 값을 사용합니다. 현재 백엔드는 즉시 영향을 받습니다.

`ALTER SEQUENCE`는 시퀀스의 `currval` 상태에 영향을 주지 않습니다.

`ALTER SEQUENCE`는 다른 트랜잭션을 OCC로 만들 수 있습니다.

기록상 이유로 시퀀스에도 `ALTER TABLE`을 사용할 수 있지만, 시퀀스에서 허용되는 `ALTER TABLE`의 유일한 변형은 위에 표시된 형식과 동일합니다.

## 예제
<a name="alter-sequence-examples"></a>

105에서 `serial`이라는 시퀀스를 다시 시작합니다.

```
ALTER SEQUENCE serial RESTART WITH 105;
```

## 호환성
<a name="alter-sequence-compatibility"></a>

`ALTER SEQUENCE`는 PostgreSQL 확장인 `AS`, `START WITH`, `OWNED BY`, `OWNER TO`, `RENAME TO`, `SET SCHEMA` 절을 제외하고 SQL 표준을 준수합니다.