이 섹션에서는 다음 작업에 필요한 기능을 설명합니다.토토 베이 객체, 토토 베이 생성기라고도 함 아니면 그냥 시퀀스. 토토 베이 객체는 특별한 단일 행 테이블입니다. 다음으로 생성됨PostgreSQL : 문서 : 9.0 : 사설 토토 사이트 작성. 토토 베이 객체는 일반적으로 생성하는 데 사용됩니다. 테이블 행의 고유 식별자입니다. 시퀀스 기능, 에 나열됨테이블 9-40, 간단하고 다중 사용자에게 안전한 가져오기 방법을 제공합니다. 토토 베이 객체의 연속 시퀀스 값입니다.
표 9-40. 토토 베이 함수
| 기능 | 반환 유형 | 설명 |
|---|---|---|
곡률(regclass) |
bigint | 가장 최근에 얻은 반환 값다음값지정된 토토 베이의 경우 |
마지막 값() |
비긴트 | 가장 최근에 얻은 반환 값다음값모든 토토 베이에 대해 |
다음값(regclass) |
비긴트 | 전진 토토 베이 및 새 값 반환 |
setval(regclass,
비긴트) |
비긴트 | 시퀀스의 현재 값 설정 |
setval(regclass,
비긴트, 부울) |
비긴트 | 시퀀스의 현재 값을 설정하고is_called플래그 |
시퀀스 함수에 의해 작동될 시퀀스는 다음과 같습니다. a로 지정됨regclass인수입니다. 단순히에 있는 토토 베이의 OID입니다.pg_class시스템 카탈로그. 그럴 필요는 없습니다. 그러나 OID를 직접 찾아보십시오.regclass데이터 유형의 입력 변환기가 작업을 수행합니다. 당신을 위해. 작은 따옴표로 묶인 토토 베이 이름을 작성하세요. 문자 그대로의 상수처럼 보입니다. 호환성을 위해 보통의 취급SQL이름, 문자열은 그렇지 않으면 소문자로 변환됩니다. 토토 베이 이름 주위에 큰따옴표가 포함되어 있습니다. 따라서:
nextval('foo')순차적으로 작동foonextval('FOO')순차적으로 작동foonextval('"Foo"')순차적으로 작동푸
필요한 경우 토토 베이 이름은 스키마로 한정될 수 있습니다.
nextval('myschema.foo')작동myschema.foonextval('"myschema".foo')위와 동일nextval('foo')검색 경로 검색foo
참조섹션 8.16더 보기 에 대한 정보regclass.
참고:이전PostgreSQL8.1, 인수 시퀀스 함수는 다음과 같은 유형이었습니다.텍스트, 아님regclass및 위에서 설명한 텍스트 문자열에서 OID 값으로의 변환은 다음과 같이 발생합니다. 각 통화 중 런타임. 이전 버전과의 호환성을 위해 이 시설은 여전히 존재하지만 내부적으로는 이제 시설로 처리됩니다. 의 암시적 강제텍스트에regclass함수 이전 호출되었습니다.
시퀀스 함수의 인수를 다음과 같이 작성할 때 장식되지 않은 리터럴 문자열은 유형의 상수가 됩니다.regclass. 이건 정말 그냥 일이니까 OID는 그럼에도 불구하고 원래 식별된 토토 베이를 추적합니다. 나중에 이름 바꾸기, 스키마 재할당 등이 있습니다."초기 바인딩"행동은 일반적으로 바람직합니다 열 기본값 및 보기의 시퀀스 참조용입니다. 하지만 때로는 원할 수도 있습니다"늦음 바인딩"여기서 시퀀스 참조는 다음에서 확인됩니다. 런타임. 지연 바인딩 동작을 얻으려면 상수를 강제로 다음과 같이 저장됩니다.텍스트대신 상수regclass:
nextval('foo'::text)foo런타임에 조회됩니다.후기 바인딩은 에서 지원되는 유일한 동작임을 참고하세요.PostgreSQL이전에 출시됨 8.1이므로 의미를 보존하기 위해 이렇게 해야 할 수도 있습니다. 오래된 애플리케이션 중 하나입니다.
물론, 시퀀스 함수의 인수는 다음과 같을 수 있습니다. 표현과 상수. 텍스트 표현식인 경우 암시적 강제로 인해 런타임이 발생합니다. 조회합니다.
사용 가능한 시퀀스 기능은 다음과 같습니다:
다음발시퀀스 개체를 다음 값으로 전진시키고 반환합니다.
그 가치. 이는 원자적으로 수행됩니다.
세션이 실행됩니다.다음값동시에 각각은 고유한 토토 베이를 안전하게 수신합니다.
값.
곡선가장 최근에 얻은 값을 반환합니다.다음발현재 이 시퀀스에 대해
세션. (다음과 같은 경우 오류가 보고됩니다.다음값이것을 위해 호출된 적이 없습니다
이 세션의 토토 베이입니다.) 이는
세션-로컬 값을 사용하면 예측 가능한 답변을 제공합니다.
또는 다른 세션이 실행되지 않았습니다.다음값현재 세션 이후
그랬어요.
마지막 값가장 최근에 반환한 값 반환다음값현재 세션에서. 이
기능은 다음과 동일합니다.곡선, 그 대신에
토토 베이 이름을 인수로 사용하여 값을 가져옵니다.
에서 사용한 마지막 토토 베이다음값현재 세션에서. 그것은
호출 오류마지막if다음값아직 발생하지 않았습니다.
현재 세션에서 호출되었습니다.
setval토토 베이 개체의 카운터 값을 재설정합니다. 는
2개의 매개변수 형식은 토토 베이를 설정합니다.마지막_값필드를 지정된 값으로 설정하고
설정합니다is_called필드에서참, 즉 다음다음값앞으로
값을 반환하기 전의 순서입니다. 보고된 값곡선또한 다음으로 설정되었습니다.
지정된 값. 3개의 매개변수 형식에서,is_called둘 중 하나로 설정할 수 있습니다.사실또는거짓.
사실과 동일한 효과가 있습니다.
2개의 매개변수 형식. 으로 설정된 경우거짓, 다음다음값지정된 내용을 정확하게 반환합니다.
가치와 시퀀스 발전은 다음과 같이 시작됩니다.
다음다음값.
또한, 다음에서 보고된 값은곡률이 경우에는 변경되지 않습니다(이
8.3 이전 동작의 변경 사항입니다). 예를 들어,
SELECT setval('foo', 42);다음다음값43을 반환합니다SELECT setval('foo', 42, true);위와 동일SELECT setval('foo', 42, false);다음다음값42를 반환합니다
다음에 의해 반환된 결과setval은 단지 두 번째 값입니다
논쟁.
토토 베이 개체가 기본 매개변수로 생성된 경우,
연속적인다음값호출은
1로 시작하는 연속 값을 반환합니다. 다른 동작은 다음과 같습니다.
의 특수 매개변수를 사용하여 얻습니다.토토 베이 생성명령; 보세요
자세한 내용은 명령 참조 페이지를 참조하세요.
중요:동시 차단을 방지하려면 동일한 토토 베이에서 숫자를 얻는 트랜잭션, a
다음값작동은 절대로 롤백됨; 즉, 일단 값을 가져온 후에는 해당 거래가 발생한 경우에도 사용된 것으로 간주됩니다.다음값나중에 중단됩니다. 이 중단된 트랜잭션이 사용되지 않은 상태로 남을 수 있음을 의미합니다."구멍"순서대로 할당된 값.setval작업도 롤백되지 않습니다.