9.17. 젠 토토 조작 기능

이 섹션에서 작동하는 기능을 설명합니다젠 토토 개체, 젠 토토 생성기 또는 단지 젠 토토라고도합니다. 젠 토토 객체는로 만든 특수 단일 열 테이블입니다.젠 토토 만들기. 젠 토토 객체는 일반적으로 테이블 행에 고유 식별자를 생성하는 데 사용됩니다. 나열된 젠 토토 함수표 9.50, 젠 토토 객체에서 연속적인 젠 토토 값을 얻기위한 간단하고 멀티 우스터-안전 방법을 제공합니다.

표 9.50. 젠 토토 기능

기능

설명

NextVal(Regclass) →bigint

젠 토토 객체를 다음 값으로 발전시키고 해당 값을 반환합니다. 이것은 원자 적으로 완료됩니다 : 여러 세션이 실행 되더라도NextVal동시에, 각각은 별개의 젠 토토 값을 안전하게받습니다. 기본 매개 변수로 젠 토토 객체가 생성 된 경우 연속NextVal통화는 1로 시작하는 연속 값을 반환합니다. 다른 동작은에서 적절한 매개 변수를 사용하여 얻을 수 있습니다.젠 토토 만들기명령.

이 기능이 필요합니다usage또는업데이트젠 토토의 특권.

setVal(RegClass, bigint[, 부울]) →bigint

젠 토토 객체의 현재 값을 설정하고 선택적으로IS_CALLED플래그. 2 파라미터 양식은 젠 토토의를 설정합니다.last_value지정된 값으로 필드를 설정하고 설정is_called필드trueNextVal값을 반환하기 전에 젠 토토를 진행합니다. 에 의해보고 될 값Currval지정된 값으로 설정됩니다. 3 개의 가라미터 형태로is_called둘 중 하나로 설정할 수 있습니다true또는거짓. true2 파라미터 양식과 동일한 효과가 있습니다. 로 설정된 경우거짓, 다음NextVal지정된 값을 정확히 반환하고 젠 토토 발전이 다음과 함께 시작됩니다NextVal. 또한,Currval이 경우에는 변경되지 않았습니다. 예를 들어,

SELECT SETVAL ( 'MySeq', 42);다음NextVal43SELECT SETVAL ( 'MySeq', 42, True);위와 동일setval ( 'myeque', 42, false); 선택다음NextVal42

결과는setVal| 두 번째 인수의 가치 일뿐입니다.

이 기능이 필요합니다업데이트젠 토토의 특권.

Currval(Regclass) →bigint

가장 최근에 얻은 값을 반환합니다NextVal현재 세션 에서이 젠 토토의 경우. (오류가보고 된 경우NextVal이 세션 에서이 젠 토토를 요구 한 적이 없습니다.) 이것은 세션-로컬 값을 반환하기 때문에 다른 세션이 실행되었는지 여부에 따라 예측 가능한 답변을 제공합니다NextVal현재 세션이 이래.

이 기능이 필요합니다usage또는select젠 토토의 특권.

LastVal() →bigint

가장 최근에 반환 된 값을 반환합니다NextVal현재 세션에서. 이 기능은 동일합니다Currval, 젠 토토 이름을 인수로 취하는 대신, 그것은 어떤 젠 토토를 의미하는지NextVal가장 최근에 현재 세션에 적용되었습니다. 전화하는 것은 오류입니다LastValifNextVal현재 세션에서 아직 호출되지 않았습니다.

이 기능이 필요합니다usage또는select마지막 사용 된 젠 토토의 특권.


주의

동일한 젠 토토에서 숫자를 얻는 동시 트랜잭션 차단을 피하기 위해NextVal호출 트랜잭션이 나중에 중단되면 재사용을 위해 되 찾을 수 없습니다. 이는 트랜잭션 중단 또는 데이터베이스 충돌로 인해 지정된 값 순서가 차이가 발생할 수 있음을 의미합니다. 거래 중단 없이도 발생할 수 있습니다. 예를 들어삽입with충돌조항은 필요한 튜플을 계산합니다.NextVal전화를 걸고, 충돌을 감지하기 전에충돌대신 규칙. 따라서,PostgreSQL젠 토토 개체획득 할 수 없습니다Gapless젠 토토.

마찬가지로, 젠 토토 상태 변경에 의해 만들어진 젠 토토 상태 변경setVal다른 거래에 즉시 볼 수 있으며, 호출 트랜잭션이 롤백되면 취소되지 않습니다.

데이터베이스 클러스터가 a를 포함하기 전에 데이터베이스 클러스터가 충돌하는 경우NextVal또는setValCall, 젠 토토 상태 변경은 영구 저장소로 향하지 않았을 수 있으므로 클러스터가 다시 시작된 후 젠 토토가 원래 또는 업데이트 된 상태를 가질 지 여부는 확실하지 않습니다. 커밋되지 않은 트랜잭션의 다른 효과도 표시되지 않기 때문에 데이터베이스 내 젠 토토 사용에는 무해합니다. 그러나 지속적인 다타베이스 목적으로 젠 토토 값을 사용하려면을 확인하십시오.NextVal그렇게하기 전에 전화가 커졌습니다.

젠 토토 함수에 의해 작동 할 젠 토토는 a에 의해 지정됩니다.Regclass인수, 이것은 단순히 젠 토토의 OID입니다PG_CLASS시스템 카탈로그. 그러나 이후로 Oid를 직접 찾을 필요는 없습니다.RegclassData Type의 입력 변환기가 귀하를 위해 작업을 수행합니다. 문자 그대로 상수처럼 보이도록 단일 따옴표로 둘러싸인 젠 토토 이름을 작성하십시오. 평범한 취급과 호환성SQL이름, 문자열은 젠 토토 이름 주위에 이중 인용문을 포함하지 않는 한 소문자로 변환됩니다. 따라서:

NextVal ( 'foo')젠 토토에서 작동fooNextVal ( 'foo')젠 토토에서 작동fooNextVal ( ' "foo"')젠 토토에서 작동foo

필요한 경우 젠 토토 이름은 스키마 자격을 사용할 수 있습니다.

NextVal ( 'myschema.foo')운영myschema.fooNextVal ( ' "myschema".foo')위와 동일NextVal ( 'foo')검색 경로 검색foo

참조섹션 8.19자세한 내용은Regclass.

Note

PostgreSQL8.1, 젠 토토 함수의 인수는 유형이었다텍스트, 아님Regclass, 그리고 위에서 설명한 텍스트 문자열에서 OID 값으로의 전환은 각 호출 동안 실행 시간에 발생합니다. 뒤로 호환성을 위해이 시설은 여전히 존재하지만 내부적으로는 이제의 암묵적 강요로 처리됩니다.텍스트toRegClass함수가 호출되기 전에.

젠 토토 함수의 인수를 불안정한 문자열로 작성하면 유형의 상수가됩니다Regclass. 이것은 실제로 OID 일 뿐이므로 나중에 이름을 변경, 스키마 재 할당 등에도 불구하고 원래 식별 된 젠 토토를 추적합니다.조기 바인딩행동은 일반적으로 열 기본값 및보기에서 젠 토토 참조에 바람직합니다. 하지만 때로는 원할 수도 있습니다늦은 바인딩젠 토토 참조가 실행 시간에 해결되는 곳. 늦은 바인딩 행동을 얻으려면 상수가 A로 저장되도록 강제로텍스트대신 상수Regclass:

NextVal ( 'foo':: text)foo런타임을 찾아보세요

늦은 바인딩은 지원되는 유일한 행동이었다.PostgreSQL8.1 이전에 출시되므로 오래된 응용 프로그램의 의미를 보존하려면이 작업을 수행해야 할 수도 있습니다.

물론, 젠 토토 함수의 인수는 상수뿐만 아니라 표현 일 수 있습니다. 텍스트 표현식 인 경우 암시 적 강요는 런타임 조회를 초래합니다.

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면