이 섹션에서 작동 함수를 설명합니다토토 베이 개체, 토토 베이 생성기 또는 단지 토토 베이라고도합니다. 토토 베이 객체는로 만든 특수 단일 열 테이블입니다.토토 베이 만들기. 토토 베이 객체는 일반적으로 테이블 행에 고유 식별자를 생성하는 데 사용됩니다. 나열된 토토 베이 함수표 9.50, 토토 베이 객체에서 연속적인 토토 베이 값을 얻기위한 간단하고 멀티 우스터-안전 방법을 제공합니다.
표 9.50. 토토 베이 기능
기능 | 반환 유형 | 설명 |
---|---|---|
|
bigint |
가장 최근에 얻은 반환 값NextVal 지정된 토토 베이 |
|
bigint |
가장 최근에 얻은 반환 값NextVal 모든 토토 베이의 경우 |
|
bigint |
사전 토토 베이 및 새로운 가치를 반환 |
|
bigint |
토토 베이의 현재 값 설정 |
|
bigint |
토토 베이의 현재 값 설정 및IS_CALLED 플래그 |
토토 베이 함수에 의해 작동 할 토토 베이는 a에 의해 지정됩니다.Regclass
인수, 이것은 단순히 토토 베이의 OID입니다pg_class
시스템 카탈로그. 그러나 이후로 Oid를 직접 찾을 필요는 없습니다.Regclass
Data Type의 입력 변환기가 귀하를 위해 작업을 수행합니다. 문자 그대로 상수처럼 보이도록 단일 따옴표로 둘러싸인 토토 베이 이름을 작성하십시오. 평범한 취급과 호환성SQL이름은 토토 베이 이름 주위에 이중 인용문을 포함하지 않는 한 문자열이 소문자로 변환됩니다. 따라서:
NextVal ( 'foo')토토 베이에서 작동foo
NextVal ( 'foo')토토 베이에서 작동foo
NextVal ( ' "foo"')토토 베이에서 작동foo
필요한 경우 토토 베이 이름을 스키마 자격으로 사용할 수 있습니다.
NextVal ( 'myschema.foo')운영myschema.foo
NextVal ( ' "myschema".foo')위와 동일NextVal ( 'foo')검색 경로 검색foo
참조섹션 8.19자세한 내용은Regclass
.
전postgresql8.1, 토토 베이 함수의 인수는 유형이었다텍스트
, 아님RegClass
, 그리고 위에서 설명한 텍스트 문자열에서 OID 값으로의 전환은 각 호출 동안 실행 시간에 발생합니다. 뒤로 호환성을 위해이 시설은 여전히 존재하지만 내부적으로는 이제의 암묵적 강요로 처리됩니다.텍스트
toRegclass
함수가 호출되기 전에.
토토 베이 함수의 인수를 끊임없는 문자열로 작성하면 유형의 상수가됩니다RegClass
. 이것은 실제로 OID 일 뿐이므로 나중에 이름을 변경, 스키마 재 할당 등에도 불구하고 원래 식별 된 토토 베이를 추적합니다.“조기 바인딩”행동은 일반적으로 열 기본 및보기에서 토토 베이 참조에 바람직합니다. 하지만 때로는 원할 수도 있습니다“늦은 바인딩”토토 베이 참조가 실행 시간에 해결되는 곳. 늦은 바인딩 행동을 얻으려면 상수가 A로 저장되도록 강제로텍스트
대신 상수Regclass
:
NextVal ( 'foo':: text)foo
런타임을 찾아 보았습니다
늦은 바인딩은 지원되는 유일한 행동이었다.PostgreSQL8.1 이전에 출시되므로 오래된 응용 프로그램의 의미를 보존하려면이 작업을 수행해야 할 수도 있습니다.
물론, 토토 베이 함수의 인수는 상수뿐만 아니라 표현 일 수 있습니다. 텍스트 표현식 인 경우 암시 적 강요는 런타임 조회를 초래합니다.
가용 순서 함수는 다음과 같습니다.
NextVal
토토 베이 객체를 다음 값으로 전진시키고 해당 값을 반환하십시오. 이것은 원자 적으로 완료됩니다 : 여러 세션이 실행 되더라도NextVal
동시에, 각각은 별개의 토토 베이 값을 안전하게받을 것입니다.
기본 매개 변수로 토토 베이 객체가 생성 된 경우 연속NextVal
통화는 1로 시작하는 연속적인 값을 반환합니다. 다른 동작은에서 특수 매개 변수를 사용하여 얻을 수 있습니다.토토 베이 만들기명령; 자세한 내용은 명령 참조 페이지를 참조하십시오.
이 기능이 필요합니다usage
또는업데이트
토토 베이의 특권.
Currval
가장 최근에 얻은 값을 반환NextVal
현재 세션 에서이 토토 베이의 경우. (오류가보고 된 경우NextVal
이 세션 에서이 토토 베이를 요구 한 적이 없습니다.) 이것은 세션-로컬 값을 반환하기 때문에 다른 세션이 실행되었는지 여부를 예측 가능한 답변을 제공합니다NextVal
현재 세션이 이래.
이 기능이 필요합니다usage
또는select
토토 베이에 대한 특권.
LastVal
가장 최근에 반환 된 값을 반환NextVal
현재 세션에서. 이 기능은 동일합니다Currval
- 토토 베이 이름을 인수로 취하는 대신, 그것은 어떤 토토 베이를 말하는지NextVal
가장 최근에 현재 세션에 적용되었습니다. 전화하는 것은 오류입니다LastVal
ifNextVal
현재 세션에서 아직 호출되지 않았습니다.
이 기능이 필요합니다usage
또는select
마지막 사용 된 토토 베이의 특권.
setVal
토토 베이 객체의 카운터 값을 재설정합니다. 2 파라미터 양식은 토토 베이의를 설정합니다.last_value
지정된 값으로 필드를 설정하고.IS_CALLED
Field totrue
, 다음을 의미NextVal
값을 반환하기 전에 토토 베이를 진행합니다.Currval
지정된 값으로 설정되어 있습니다. 3 개의 가라미터 형태로is_called
둘 중 하나로 설정할 수 있습니다true
또는거짓
. true
2 파라미터 양식과 동일한 효과가 있습니다. 로 설정된 경우거짓
, 다음NextVal
지정된 값을 정확히 반환하고 토토 베이 발전이 다음과 함께 시작됩니다NextVal
. 또한,Currval
이 경우에는 변경되지 않았습니다. 예를 들어,
SELECT SETVAL ( 'foo', 42);다음NextVal
43SELECT SETVAL ( 'foo', 42, true);위와 동일setval ( 'foo', 42, false); 선택다음NextVal
42
결과는setVal
| 두 번째 인수의 가치 일뿐입니다.
이 기능이 필요합니다업데이트
토토 베이의 특권.
동일한 토토 베이에서 숫자를 얻는 동시 트랜잭션 차단을 피하기 위해NextVal
호출 트랜잭션이 나중에 중단되면 재사용을 위해 재사용 할 수 없습니다. 이는 트랜잭션 중단 또는 데이터베이스 충돌로 인해 지정된 값 순서가 차이가 발생할 수 있음을 의미합니다. 거래 중단 없이도 발생할 수 있습니다. 예를 들어삽입
with충돌
조항은 필요한 튜플을 계산합니다.NextVal
전화를 걸어 전화를 걸기 전에충돌
대신 규칙. 따라서,PostgreSQL토토 베이 개체획득하는 데 사용될 수 없습니다“Gapless”토토 베이.
마찬가지로, 토토 베이 상태 변경에 의해 만들어진 토토 베이 상태 변경setVal
다른 거래에 즉시 볼 수 있으며, 호출 트랜잭션이 롤백되면 취소되지 않습니다.
데이터베이스 클러스터가 a를 포함하기 전에 데이터베이스 클러스터가 충돌하는 경우NextVal
또는setVal
Call, 토토 베이 상태 변경은 영구 저장소로 향하지 않았을 수 있으므로 클러스터가 다시 시작된 후 토토 베이가 원래 또는 업데이트 된 상태를 가질 지 여부는 확실하지 않습니다. 커밋되지 않은 트랜잭션의 다른 효과도 표시되지 않기 때문에 데이터베이스 내 토토 베이 사용에는 무해합니다. 그러나 지속적인 다타베이스 목적으로 토토 베이 값을 사용하려면을 확인하십시오.NextVal
그렇게하기 전에 전화가 커졌습니다.