시퀀스 조작 함수
이 섹션에서는 시퀀스 객체(시퀀스 생성기 또는 단순히 시퀀스라고도 함)를 조작하기 위한 함수에 대해 설명합니다. 시퀀스 객체는 CREATE SEQUENCE로 만들어진 특수 단일 행 테이블입니다. 시퀀스 객체는 일반적으로 테이블 행의 고유 식별자를 생성하는 데 사용됩니다. 시퀀스 함수는 시퀀스 객체에서 연속 시퀀스 값을 얻기 위한 간단한 다중 사용자 환경에서 안전한 방법을 제공합니다.
중요
시퀀스를 사용할 때는 캐시 값을 신중하게 고려해야 합니다. 자세한 내용은 CREATE SEQUENCE 페이지의 중요 안내를 참조하세요.
워크로드 패턴을 기반으로 시퀀스를 가장 잘 사용하는 방법에 대한 지침은 시퀀스 및 자격 증명 열 작업 섹션을 참조하세요.
| 함수 | 설명 |
|---|---|
nextval ( regclass ) → bigint |
시퀀스 객체를 다음 값으로 진행시키고 해당 값을 반환합니다. 이 작업은 원자적으로 수행됩니다. 여러 nextval 세션이 동시에 실행되더라도 각 세션은 안전하게 서로 다른 시퀀스 값을 수신합니다. 시퀀스 객체가 기본 파라미터로 만들어진 경우 연속 nextval 직접 호출은 1로 시작하는 증가하는 값을 반환합니다. CREATE SEQUENCE 명령에서 적절한 파라미터를 사용하여 다른 동작을 가져올 수 있습니다. 이 함수에는 시퀀스에 대한 USAGE 또는 UPDATE 권한이 필요합니다. |
setval ( regclass, bigint [, boolean ] ) → bigint |
시퀀스 객체의 현재 값과 선택적으로 is_called 플래그를 설정합니다. 2-파라미터 형식은 시퀀스의 last_value 필드를 지정된 값으로 설정하고 해당 is_called 필드를 true로 설정합니다. 즉, 다음 nextval은 값을 반환하기 전에 시퀀스를 진행합니다. currval에서 보고할 값도 지정된 값으로 설정됩니다. 3-파라미터 양식에서는 is_called를 true 또는 false로 설정할 수 있습니다. true는 2-파라미터 양식과 동일한 효과를 갖습니다. false로 설정하면 다음 nextval은 지정된 값을 정확히 반환하고 시퀀스 진행은 다음 nextval로 시작됩니다. 또한 currval에서 보고하는 값은 여기에서 변경되지 않습니다. 예제:
setval에서 반환되는 결과는 두 번째 인수의 값일 뿐입니다. 이 함수에는 시퀀스에 대한 UPDATE 권한이 필요합니다. |
currval ( regclass ) → bigint |
현재 세션에서 이 시퀀스에 대해 nextval에서 가장 최근에 얻은 값을 반환합니다. (이 세션에서 이 시퀀스에 대해 nextval이 직접적으로 호출된 적이 없는 경우 오류가 보고됩니다.) 세션-로컬 값을 반환하기 때문에 현재 세션으로 인해 다른 세션이 nextval을 실행했는지 여부에 대한 예측 가능한 답변을 제공합니다. 이 함수에는 시퀀스에 대한 USAGE 또는 SELECT 권한이 필요합니다. |
lastval () → bigint |
현재 트랜잭션에서 nextval이 가장 최근에 반환한 값을 반환합니다. 이 함수는 시퀀스 이름을 인수로 취하는 대신 현재 트랜잭션에서 nextval이 가장 최근에 적용된 시퀀스를 참조한다는 점을 제외하면 currval과 동일합니다. nextval이 현재 트랜잭션에서 아직 직접적으로 호출되지 않은 경우 lastval을 직접적으로 호출하는 것은 오류입니다. 이 함수에는 마지막으로 사용된 시퀀스에 대한 USAGE 또는 SELECT 권한이 필요합니다. |
주의
직접 호출 트랜잭션이 나중에 중단되는 경우 nextval에서 얻은 값은 재사용을 위해 회수되지 않습니다. 즉, 트랜잭션 중단 또는 데이터베이스 충돌로 인해 할당된 값 시퀀스에 공백이 발생할 수 있습니다. 이는 트랜잭션 중단 없이도 발생할 수 있습니다. 예를 들어 ON CONFLICT 절이 있는 INSERT는 ON CONFLICT 규칙을 대신 따르게 하는 충돌을 감지하기 전에 필요한 nextval 직접 호출 수행을 포함하여 삽입할 튜플을 계산합니다. 따라서 Aurora DSQL의 시퀀스 객체는 ‘간격 없는’ 시퀀스를 얻는 데 사용할 수 없습니다.
마찬가지로 setval에서 수행한 시퀀스 상태 변경은 다른 트랜잭션에 즉시 표시되며 호출 트랜잭션이 롤백되는 경우 실행 취소되지 않습니다.
시퀀스 함수에 의해 작동할 시퀀스는 regclass 인수에 의해 지정됩니다. 인수는 단순히 pg_class 시스템 카탈로그에 있는 시퀀스의 OID입니다. 그러나 regclass 데이터 형식의 입력 변환기가 작업을 대신 수행하므로 OID를 직접 조회할 필요는 없습니다. 자세한 내용은 객체 식별자 유형