CREATE SEQUENCE — 새로운 토토 베이 생성기 정의
[ 임시 생성 | 온도 ] 토토 베이 [ 존재하지 않는 경우 ]이름[ AS데이터_유형] [ 증분 [ 으로 ]증분] [ 최소값최소값| 최소값 없음 ] [ 최대값최대값| 최대값 없음 ] [ 시작 [ 함께 ]시작] [ 캐시캐시] [ [ 아니요 ] 주기 ] [ 소유자:테이블_이름.컬럼_이름| 없음 ]
토토 베이 생성새 시퀀스 번호 생성기를 생성합니다. 여기에는 이름이 있는 새로운 특수 단일 행 테이블을 생성하고 초기화하는 작업이 포함됩니다.이름. 생성기는 명령을 실행하는 사용자가 소유합니다.
스키마 이름이 주어지면 지정된 스키마에 시퀀스가 생성됩니다. 그렇지 않으면 현재 스키마에 생성됩니다. 임시 시퀀스는 특수한 스키마에 존재하므로 임시 토토 베이 생성 시 스키마 이름을 지정할 수 없습니다. 시퀀스 이름은 동일한 스키마에 있는 다른 시퀀스, 테이블, 인덱스, 뷰 또는 외부 테이블의 이름과 구별되어야 합니다.
토토 베이가 생성된 후 함수를 사용합니다.다음값, 곡선및setval시퀀스에서 작동합니다. 이러한 함수는 다음 문서에 설명되어 있습니다.PostgreSQL : 문서 : 10 : 9.16. 토토 캔 조작 기능.
시퀀스를 직접 업데이트할 수는 없지만 다음과 같은 쿼리를 사용할 수 있습니다:
SELECT * FROM이름;
시퀀스의 매개변수와 현재 상태를 검사합니다. 특히,마지막_값12948_13124다음값전화합니다.)
임시또는온도지정된 경우 시퀀스 개체는 이 세션에 대해서만 생성되며 세션 종료 시 자동으로 삭제됩니다. 동일한 이름을 가진 기존 영구 시퀀스는 스키마 한정 이름으로 참조되지 않는 한 임시 시퀀스가 존재하는 동안 (이 세션에서) 표시되지 않습니다.
존재하지 않는 경우같은 이름의 관계가 이미 존재하는 경우 오류를 발생시키지 마십시오. 이 경우 통지가 발행됩니다. 기존 관계가 생성되었을 시퀀스와 유사하다는 보장은 없습니다. 시퀀스가 아닐 수도 있습니다.
이름생성될 시퀀스의 이름(선택적으로 스키마 한정).
데이터_유형선택적 조항AS시퀀스의 데이터 유형을 지정합니다. 유효한 유형은 다음과 같습니다.데이터_유형smallint, 정수및bigint. 비긴트기본값입니다. 데이터 유형에 따라 시퀀스의 기본 최소값과 최대값이 결정됩니다.
증분선택적 조항증분 기준새 값을 생성하기 위해 현재 시퀀스 값에 추가되는 값을 지정합니다. 양수 값은 오름차순을 만들고, 음수 값은 내림차순을 만듭니다. 기본값은 1입니다.증분
최소값MINVALUE 없음선택적 조항MINVALUE시퀀스가 생성할 수 있는 최소값을 결정합니다. 이 절이 제공되지 않은 경우 또는최소값MINVALUE 없음이 지정되면 기본값이 사용됩니다. 오름차순 시퀀스의 기본값은 1입니다. 내림차순 시퀀스의 기본값은 데이터 유형의 최소값입니다.
최대값MAXVALUE 없음선택적 조항MAXVALUE시퀀스의 최대값을 결정합니다. 이 절이 제공되지 않은 경우 또는최대값MAXVALUE 없음이 지정되면 기본값이 사용됩니다. 오름차순 시퀀스의 기본값은 데이터 유형의 최대값입니다. 내림차순 시퀀스의 기본값은 -1입니다.
시작선택적 조항시작하기시퀀스가 어디에서나 시작되도록 허용합니다. 기본 시작 값은시작최소값오름차순 토토 베이의 경우최대값내림차순인 경우.
캐시선택적 조항캐시더 빠른 액세스를 위해 사전 할당되고 메모리에 저장될 시퀀스 번호 수를 지정합니다. 최소값은 1(한 번에 하나의 값만 생성 가능, 즉 캐시 없음)이며, 이는 기본값이기도 합니다.캐시
사이클주기 없음그사이클옵션을 사용하면 다음과 같은 경우 시퀀스를 순환할 수 있습니다.최대값또는최소값각각 오름차순 또는 내림차순으로 도달했습니다. 한도에 도달하면 생성되는 다음 숫자는최소값또는최대값각각.
만약주기 없음이 지정되었습니다. 모든 호출은다음값시퀀스가 최대값에 도달하면 오류가 반환됩니다. 둘 다 아니라면사이클또는주기 없음지정되었습니다.주기 없음기본값입니다.
소유자 테이블_이름.열_이름소유자 없음그소유자옵션을 사용하면 시퀀스가 특정 테이블 열과 연결되므로 해당 열(또는 전체 테이블)이 삭제되면 시퀀스도 자동으로 삭제됩니다. 지정된 테이블은 소유자가 동일해야 하며 시퀀스와 동일한 스키마에 있어야 합니다.소유자 없음(기본값)는 그러한 연관이 없음을 지정합니다.
사용드롭 순서토토 베이를 제거합니다.
시퀀스는 다음을 기반으로 합니다.bigint산술이므로 범위는 8바이트 정수 범위(-9223372036854775808 ~ 9223372036854775807)를 초과할 수 없습니다.
왜냐하면다음발그리고setval호출은 롤백되지 않으며 다음과 같은 경우 시퀀스 개체를 사용할 수 없습니다.“틈없는”시퀀스 번호 할당이 필요합니다. 카운터가 포함된 테이블의 배타적 잠금을 사용하여 간격 없는 할당을 구축하는 것이 가능합니다. 하지만 이 솔루션은 특히 많은 트랜잭션에 시퀀스 번호가 동시에 필요한 경우 시퀀스 객체보다 훨씬 더 비쌉니다.
다음과 같은 경우 예상치 못한 결과를 얻을 수 있습니다.캐시1보다 큰 설정은 여러 세션에서 동시에 사용되는 시퀀스 개체에 사용됩니다. 각 세션은 시퀀스 객체에 한 번 액세스하는 동안 연속 시퀀스 값을 할당하고 캐시하며 시퀀스 객체의 값을 증가시킵니다.마지막_값따라서. 그럼 다음캐시-1 사용다음값해당 세션 내에서는 시퀀스 개체를 건드리지 않고 미리 할당된 값을 반환하기만 하면 됩니다. 따라서 할당되었지만 세션 내에서 사용되지 않은 모든 번호는 해당 세션이 끝나면 손실되어 결과적으로“구멍”순서대로.
또한 여러 세션이 고유한 토토 베이 값을 할당하도록 보장되지만 모든 세션을 고려할 때 값이 순서에 맞지 않게 생성될 수 있습니다. 예를 들어,캐시10으로 설정하면 세션 A는 값 1..10을 예약하고 반환할 수 있습니다.다음값=1이면 세션 B는 값 11..20을 예약하고 반환할 수 있습니다.다음값=세션 A가 생성되기 전 11다음값=2. 따라서 a캐시하나의 설정은 다음과 같이 가정하는 것이 안전합니다다음값값은 순차적으로 생성됩니다. 와 함께캐시1보다 큰 설정은 다음과 같이 가정해야 합니다.다음값값은 순전히 순차적으로 생성되는 것이 아니라 모두 고유합니다. 또한,마지막_값아직 반환되었는지 여부에 관계없이 모든 세션에서 예약된 최신 값을 반영합니다.다음값.
또 다른 고려사항은 asetval이러한 시퀀스에서 실행되면 캐시된 사전 할당된 값을 모두 사용할 때까지 다른 세션에서 이를 알 수 없습니다.
오름차순 토토 베이 생성연재, 101부터 시작:
CREATE SEQUENCE 일련번호 시작 101;
이 순서에서 다음 숫자를 선택하세요:
SELECT nextval('연속');
다음 값
---------
101
이 순서에서 다음 숫자를 선택하세요:
SELECT nextval('연속');
다음 값
---------
102
다음 순서를 사용하세요.삽입명령:
배포자 VALUES에 삽입(nextval('serial'), 'nothing');
a 이후 토토 베이 값 업데이트다음에서 복사:
시작;
'input_file'에서 배포자를 복사하세요.
SELECT setval('serial', max(id)) FROM 배포자;
끝;토토 베이 생성다음을 준수함SQL표준, 다음 예외는 있음:
다음 값을 얻는 것은 다음을 사용하여 수행됩니다.다음값()표준 대신 함수다음 값표현.
그소유자절은 a입니다PostgreSQL확장.