이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 36.17. 관련 객체를 스포츠 토토 사이트자로 포장버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

35.15. 관련 개체를 패키지로 패키징 롤 토토자

유용한 롤 토토포스트그레SQL일반적으로 여러 SQL을 포함합니다. 객체; 예를 들어, 새로운 데이터 유형에는 새로운 기능이 필요합니다. 새로운 연산자, 그리고 아마도 새로운 인덱스 연산자 클래스일 것입니다. 그것은 이러한 모든 개체를 단일 패키지로 수집하는 데 도움이 됩니다. 데이터베이스 관리를 단순화합니다.포스트그레SQL그러한 패키지를 호출합니다롤 토토. 롤 토토을 정의하려면 다음이 필요합니다. 적어도 a스크립트 파일다음을 포함함SQL생성 명령 롤 토토 프로그램의 객체 및 a제어 파일롤 토토 프로그램 자체의 몇 가지 기본 속성을 지정합니다. 만약에 롤 토토에는 C 코드가 포함되어 있으며 일반적으로 C 코드가 빌드된 공유 라이브러리 파일입니다. 일단 당신은 이 파일을 가지고 있으면 됩니다. 간단합니다.롤 토토 프로그램 만들기명령은 다음을 로드합니다. 데이터베이스에 개체를 추가합니다.

단순한 롤 토토 기능이 아닌 롤 토토 기능을 사용하는 것의 가장 큰 장점은 실행 중SQL로드 스크립트 무리"느슨한"객체를 당신의 데이터베이스인가요?PostgreSQL할 것이다 그런 다음 롤 토토의 개체가 함께 이동한다는 것을 이해하십시오. 당신 단일로 모든 객체를 삭제할 수 있습니다.롤 토토 삭제명령(필요 없음 별도로 유지"제거"스크립트). 더욱 유용합니다.pg_dump알고 있어요 개별 구성원 개체를 덤프해서는 안 됩니다. 롤 토토명 — 단지 다음을 포함합니다.만들기 롤 토토11137_11437

포스트그레SQL당신을 허락하지 않을 것입니다 다음을 제외하고 롤 토토에 포함된 개별 개체를 삭제합니다. 전체 롤 토토을 삭제합니다. 또한, 롤 토토 멤버 개체 정의(예: via함수 생성 또는 교체에 대한 함수), 수정된 정의는 에 의해 버려짐pg_dump. 그러한 변화 일반적으로 동일한 변경을 동시에 수행하는 경우에만 합리적입니다. 롤 토토의 스크립트 파일에 있습니다. (단, 특별한 규정이 있습니다. 구성 데이터가 포함된 테이블의 경우 아래를 참조하세요.)

롤 토토 메커니즘에는 패키징에 대한 규정도 있습니다. SQL 객체의 정의를 조정하는 수정 스크립트 롤 토토자에 포함되어 있습니다. 예를 들어 버전 1.1의 경우 롤 토토은 하나의 기능을 추가하고 다른 기능의 본문을 변경합니다. 기능을 1.0과 비교하면 롤 토토 작성자는 다음을 제공할 수 있습니다.업데이트 스크립트이렇게 하면 딱 둘이 됩니다 변화.롤 토토 프로그램 업데이트 변경12503_12637

롤 토토 멤버가 될 수 있는 SQL 개체의 종류는 다음과 같습니다. 설명에 표시됨사설 토토 : 문서 : 9.3 : Alter Extension. 특히, 데이터베이스 클러스터 전체에 걸쳐 있는 객체는 데이터베이스, 롤, 테이블스페이스 등은 롤 토토할 수 없습니다. 롤 토토은 하나의 데이터베이스 내에서만 알려져 있기 때문에 멤버입니다. (롤 토토 스크립트가 그러한 생성을 금지하지는 않지만 만약 그렇다면 해당 개체는 해당 개체의 일부로 추적되지 않습니다. 롤 토토.) 또한 테이블은 롤 토토명, 인덱스와 같은 보조 객체는 직접적으로 생성되지 않습니다. 롤 토토의 구성원으로 간주됩니다. 또 다른 중요한 점은 스키마는 롤 토토에 속할 수 있지만 그 반대는 아닙니다. 롤 토토명은 규정되지 않은 이름을 가지며 존재하지 않습니다."내부"모든 스키마. 롤 토토의 그러나 구성원 개체는 언제든지 스키마에 속합니다. 개체 유형에 적합합니다. 그럴 수도 있고 아닐 수도 있다 롤 토토이 해당 구성원의 스키마를 소유하는 데 적합함 물체가 안에 있습니다.

35.15.1. 롤 토토 정의 객체

널리 배포된 롤 토토 프로그램은 다음에 대해 거의 가정하지 않아야 합니다. 그들이 차지하는 데이터베이스. 특히, 귀하가 발행하지 않는 한SET search_path = pg_temp, 각각 자격이 없다고 가정 이름은 악의적인 사용자가 정의한 개체로 해석될 수 있습니다. 다음에 의존하는 구성에 주의하세요.검색_경로암시적으로:IN그리고사례표현언제항상 다음을 선택하세요. 검색 경로를 사용하는 연산자입니다. 대신에연산자(스키마.=) 모두그리고경우의 경우표현.

35.15.2. 롤 토토 파일

PostgreSQL : 문서명령은 각 롤 토토자에 대한 제어 파일에 의존합니다. 접미사가 붙은 롤 토토명과 동일하게 이름 지정됨.control, 설치 위치에 배치되어야 합니다.SHAREDIR/롤 토토자디렉토리. 있어야 한다 또한 하나 이상이어야 합니다.SQL스크립트 명명 패턴을 따르는 파일롤 토토--버전.sql(예:foo--1.0.sql버전용1.0롤 토토자foo). 작성자: 기본적으로 스크립트 파일도에 배치됩니다.SHAREDIR/롤 토토자디렉토리; 하지만 제어 파일 스크립트 파일에 대해 다른 디렉터리를 지정할 수 있습니다.

롤 토토 제어 파일의 파일 형식은 롤 토토 제어 파일과 동일합니다.postgresql.conf파일, 즉 목록 의매개변수_이름 = 할당, 한 줄에 하나씩. 에 의해 소개된 빈 줄과 주석#허용됩니다. 다음 값을 인용하세요. 단일 단어나 숫자가 아닙니다.

제어 파일은 다음 매개변수를 설정할 수 있습니다:

디렉토리 (문자열)

롤 토토 프로그램이 포함된 디렉토리SQL스크립트 파일. 절대 경로가 아닌 이상 주어진 이름은 설치에 상대적입니다.공유디르디렉토리. 기본 동작은 다음과 같습니다. 지정하는 것과 동일함디렉토리 = '롤 토토'.

기본_버전 (문자열)

롤 토토 프로그램의 기본 버전(다음 버전이 될 버전) 버전이 지정되지 않은 경우 설치됨만들기 롤 토토). 생략할 수 있지만 결과는 다음과 같습니다.롤 토토 프로그램 만들기아니면 실패버전옵션이 표시되므로 일반적으로 원하지 않는 경우 그러려고.

댓글 (문자열)

롤 토토 프로그램에 대한 설명(문자열)입니다. 대안적으로, comment는를 사용하여 설정할 수 있습니다.댓글스크립트 파일의 명령.

인코딩 (문자열)

스크립트 파일에 사용되는 문자 세트 인코딩. 이 스크립트 파일에 ASCII가 아닌 항목이 포함된 경우 지정해야 합니다. 문자. 그렇지 않으면 파일이 다음 위치에 있는 것으로 간주됩니다. 데이터베이스 인코딩.

모듈_경로이름 (문자열)

이 매개변수의 값은 각각에 대해 대체됩니다. 발생MODULE_PATHNAME에 스크립트 파일. 설정되지 않은 경우 대체가 이루어지지 않습니다. 일반적으로 이는 다음과 같이 설정됩니다.$libdir/shared_library_name그리고 나서MODULE_PATHNAME다음에서 사용됨함수 생성C 언어 함수용 명령, 스크립트 파일에 이름을 직접 연결할 필요가 없도록 공유 라이브러리.

요구 (문자열)

이 롤 토토이 의존하는 롤 토토의 이름 목록, 예를 들어requires = 'foo, bar'. 그 이 롤 토토 프로그램을 설치하려면 먼저 롤 토토 프로그램을 설치해야 합니다.

수퍼유저 (부울)

이 매개변수가 다음과 같은 경우(이것은 기본값), 슈퍼유저만 롤 토토을 생성하거나 업데이트할 수 있습니다. 새 버전. 으로 설정된 경우거짓, 그냥 설치 시 명령을 실행하는 데 필요한 권한 또는 업데이트 스크립트가 필요합니다.

재배치 가능 (부울)

롤 토토자는재배치 가능그렇다면 포함된 개체를 다른 스키마로 이동할 수 있음 롤 토토 프로그램을 처음 만든 후. 기본값은거짓, 즉 롤 토토 프로그램을 재배치할 수 없습니다. 참조 자세한 내용은 아래를 참조하세요.

스키마 (문자열)

이 매개변수는 재배치 불가능한 롤 토토에 대해서만 설정될 수 있습니다. 롤 토토이 명명된 스키마에 정확히 로드되도록 강제합니다. 그리고 다른 어떤 것도 아닙니다. 자세한 내용은 아래를 참조하세요.

주 제어 파일에 추가로롤 토토.control, 롤 토토에는 스타일 이름으로 명명된 보조 제어 파일이 있을 수 있습니다.롤 토토--버전.control. 제공되는 경우 다음 사항을 준수해야 합니다. 스크립트 파일 디렉터리에 위치해야 합니다. 보조 제어 파일 기본 제어 파일과 동일한 형식을 따릅니다. 모든 매개변수 보조 제어 파일에 설정하면 기본 제어 파일이 무시됩니다. 해당 버전의 롤 토토을 설치하거나 업데이트할 때. 그러나 매개변수디렉토리그리고기본_버전다음에는 설정할 수 없습니다. 보조 제어 파일.

롤 토토 프로그램의SQL스크립트 파일에는 트랜잭션 제어를 제외한 모든 SQL 명령이 포함될 수 있습니다. 명령(시작, 커밋등) 및 실행할 수 없는 명령 트랜잭션 블록 내부(예:진공). 그 이유는 스크립트 파일이 트랜잭션 블록 내에서 암시적으로 실행됩니다.

롤 토토 프로그램의SQL스크립트 파일에는 다음으로 시작하는 줄도 포함될 수 있습니다.\에코, 무시됩니다(주석으로 처리). 롤 토토 메커니즘에 의해. 이 조항은 일반적으로 다음과 같이 사용됩니다. 스크립트 파일이 공급되면 오류가 발생합니다.psql다음을 통해 로드되는 대신롤 토토 프로그램 만들기(아래 예제 스크립트 참조). 없이 따라서 사용자가 실수로 롤 토토 프로그램의 콘텐츠를 다음과 같이 로드할 수도 있습니다."느슨한"객체가 아닌 롤 토토, 회복하기가 다소 지루한 상태 에서.

스크립트 파일에는 다음에서 허용하는 모든 문자가 포함될 수 있습니다. 지정된 인코딩, 제어 파일에는 일반 ASCII만 포함되어야 합니다. 방법이 없기 때문에포스트그레SQL컨트롤 인코딩이 무엇인지 알기 위해 파일이 있습니다. 실제로 이것은 사용하려는 경우에만 문제입니다. 롤 토토명 주석에 ASCII가 아닌 문자가 있습니다. 추천 이 경우 제어 파일을 사용하지 않는 것이 좋습니다.댓글매개변수 대신에 사용롤 토토에 대한 의견스크립트 파일 내에서 댓글.

35.15.3. 롤 토토 재배치성

사용자는 종종 롤 토토 프로그램에 포함된 개체를 로드하려고 합니다. 롤 토토 작성자가 염두에 두었던 것과는 다른 스키마로 변경됩니다. 재배치 가능성에는 세 가지 수준이 지원됩니다.

  • 완전히 재배치 가능한 롤 토토은 다른 스키마로 이동할 수 있습니다 데이터베이스에 로드된 후에도 언제든지 가능합니다. 이것은 끝냈어요롤 토토 프로그램 설정 스키마 변경모든 구성원 개체의 이름을 자동으로 바꾸는 명령 새로운 스키마. 일반적으로 이는 롤 토토이 있는 경우에만 가능합니다. 어떤 스키마에 대한 내부 가정이 포함되어 있지 않습니다. 개체가 있습니다. 또한 롤 토토의 개체는 모두 하나에 있어야 합니다. 시작하기 위한 스키마(어떤 객체에도 속하지 않는 객체 무시) 스키마(예: 절차적 언어). 완전히 재배치 가능으로 표시 설정에 의한 롤 토토재배치 가능 = true에 제어 파일입니다.

  • 롤 토토 프로그램은 설치 중에 재배치가 가능할 수 있지만 그렇지 않습니다. 그 후에. 이는 일반적으로 롤 토토 프로그램의 스크립트가 파일은 대상 스키마를 명시적으로 참조해야 합니다. 예를 들어 설정 중검색_경로SQL의 속성 기능. 이러한 롤 토토의 경우 다음을 설정하세요.재배치 가능 = false제어 파일에서 사용@extschema@대상 스키마 참조 스크립트 파일에서. 이 문자열의 모든 항목이 대체됩니다. 스크립트가 실행되기 전에 실제 대상 스키마 이름으로. 사용자는를 사용하여 대상 스키마를 설정할 수 있습니다.스키마옵션만들기 롤 토토.

  • 롤 토토 프로그램이 재배치를 전혀 지원하지 않는 경우 설정재배치 가능 = false제어 파일에서, 그리고 또한 설정스키마이름으로 의도된 대상 스키마. 이렇게 하면의 사용이 방지됩니다.스키마옵션만들기 롤 토토, 제어 파일. 이 선택은 일반적으로 롤 토토이 필요한 경우에 필요합니다. 스키마 이름에 대한 내부 가정이 포함되어 있습니다. 다음의 사용으로 대체됨@extschema@.@extschema@대체 메커니즘은 이 경우에도 사용할 수 있지만 이후로는 사용이 제한되어 있습니다. 스키마 이름은 제어 파일에 의해 결정됩니다.

모든 경우에 스크립트 파일은 다음과 같이 실행됩니다.검색_경로처음에는 대상 스키마를 가리키도록 설정되었습니다. 즉,롤 토토 프로그램 생성이와 동등한 작업을 수행합니다:

로컬 검색 경로를 @extschema@으로 설정;

이것은 스크립트 파일에 의해 생성된 개체가 대상 스키마. 스크립트 파일은 변경될 수 있습니다.검색_경로원한다면, 그러나 일반적으로 그렇습니다 바람직하지 않습니다.검색_경로다음으로 복원되었습니다. 완료 시 이전 설정만들기 롤 토토.

대상 스키마는 다음에 의해 결정됩니다.스키마매개변수가 제어 파일에 있는 경우 그렇지 않으면 다음에 의해 제공됩니다.스키마옵션롤 토토 프로그램 만들기그것이 주어지면, 그렇지 않으면 현재 기본 객체 생성 스키마(첫 번째 발신자의 경우검색_경로). 때 제어 파일스키마매개변수가 사용되며, 대상 스키마가 아직 존재하지 않는 경우 생성되지만 다른 두 가지 경우는 이미 존재해야 합니다.

필요한 롤 토토 기능이 다음에 나열되어 있는 경우요구제어 파일에서 대상 스키마 의 초기 설정에 추가됩니다.검색_경로. 이를 통해 개체를 볼 수 있습니다. 새 롤 토토의 스크립트 파일에 추가합니다.

재배치 불가능한 롤 토토에는 확산된 개체가 포함될 수 있지만 여러 스키마에 걸쳐 일반적으로 모든 스키마를 배치하는 것이 바람직합니다. 외부 사용을 위한 객체를 단일 스키마로 변환합니다. 롤 토토의 대상 스키마를 고려했습니다. 이러한 배열이 작동합니다. 기본 설정으로 편리하게검색_경로종속 생성 중 롤 토토명.

35.15.4. 롤 토토 구성 테이블

일부 롤 토토에는 데이터가 포함된 구성 테이블이 포함되어 있습니다. 설치 후 사용자가 추가하거나 변경할 수 있는 항목 롤 토토. 일반적으로 테이블이 롤 토토의 일부인 경우 테이블의 정의나 내용은 모두 덤프되지 않습니다.pg_dump. 하지만 그 행동은 구성 테이블에는 바람직하지 않습니다. 모든 데이터 변경 사항 사용자는 덤프에 포함되어야 합니다. 그렇지 않으면 롤 토토 프로그램이 작동합니다. 덤프하고 다시 로드한 후에는 다르게 표시됩니다.

이 문제를 해결하기 위해 롤 토토 프로그램의 스크립트 파일은 테이블은 구성 테이블로 생성되었으며 이로 인해pg_dump테이블을 포함하려면 덤프의 내용(정의가 아님). 그렇게 하려면 기능pg_extension_config_dump(regclass, 텍스트)테이블 생성 후, 예를 들어

CREATE TABLE my_config(키 텍스트, 값 텍스트);

SELECT pg_catalog.pg_extension_config_dump('my_config', '');

이 방법으로 테이블을 얼마든지 표시할 수 있습니다.

두 번째 인수가pg_extension_config_dump은 빈 문자열입니다. 테이블의 전체 내용이 다음에 의해 덤프됩니다.pg_dump. 이는 일반적으로 다음과 같은 경우에만 정확합니다. 롤 토토 스크립트에 의해 생성된 테이블은 처음에는 비어 있습니다. 만약에 초기 데이터와 사용자가 제공한 데이터가 혼합되어 있습니다. 테이블, 의 두 번째 인수pg_extension_config_dump제공어디에서27800_27874

CREATE TABLE my_config(키 텍스트, 값 텍스트, 표준 항목 부울);

SELECT pg_catalog.pg_extension_config_dump('my_config', 'standard_entry가 아닌 곳');

그런 다음 다음을 확인하세요standard_entry생성된 행에서만 true입니다. 롤 토토 프로그램의 스크립트로.

초기 제공 행과 같은 더 복잡한 상황 사용자가 수정할 수 있으며 생성하여 처리할 수 있습니다. 행이 수정되었는지 확인하기 위해 구성 테이블에서 트리거합니다. 올바르게 표시되어 있습니다.

당신은 다음과 관련된 필터 조건을 변경할 수 있습니다 호출을 통한 구성 테이블pg_extension_config_dump다시. (이것은 일반적으로 롤 토토 업데이트 스크립트에 유용합니다.) 테이블을 더 이상 구성 테이블이 아닌 것으로 표시하여 테이블을 분리합니다. 롤 토토 프로그램에서롤 토토 변경 ... 드롭 테이블.

이 테이블 사이의 외래 키 관계는 pg_dump에 의해 테이블이 덤프되는 순서를 지정합니다. 특히 pg_dump는 참조 테이블을 덤프하려고 시도합니다. 참조 테이블 앞에. 외래 키 관계는 다음과 같습니다. CREATE EXTENSION 시간에 설정합니다(데이터가 로드되기 전). 테이블) 순환 종속성은 지원되지 않습니다. 원형일 때 종속성이 존재하는 경우 데이터는 여전히 덤프되지만 덤프는 직접 복원할 수 없으며 사용자 개입이 발생합니다. 필수입니다.

35.15.5. 롤 토토 업데이트

롤 토토 메커니즘의 한 가지 장점은 다음을 제공한다는 것입니다. 정의하는 SQL 명령에 대한 업데이트를 관리하는 편리한 방법 롤 토토의 개체. 이는 버전 이름을 연결하여 수행됩니다. 또는 각 롤 토토 버전의 출시된 번호 설치 스크립트. 또한 사용자가 다음을 수행할 수 있도록 하려는 경우 한 버전에서 다음 버전으로 데이터베이스를 동적으로 업데이트합니다. 당신은 제공해야합니다업데이트 스크립트그것 한 버전에서 다음 버전으로 이동하는 데 필요한 변경을 수행합니다. 업데이트 스크립트에는 패턴을 따르는 이름이 있습니다.롤 토토--이전 버전--새 버전.sql(예:foo--1.0--1.1.sql수정할 명령이 포함되어 있습니다. 버전1.0롤 토토foo버전으로1.1).

적절한 업데이트 스크립트를 사용할 수 있는 경우 다음 명령롤 토토 프로그램 업데이트 변경업데이트할 것입니다. 지정된 새 버전에 대한 롤 토토이 설치되었습니다. 업데이트 스크립트 동일한 환경에서 실행됩니다.만들기 롤 토토설치 스크립트 제공: 특히,검색_경로같은 방법으로 설정하고, 스크립트에 의해 생성된 모든 새 개체는 자동으로 추가됩니다. 롤 토토명.

롤 토토에 보조 제어 파일이 있는 경우 제어 업데이트 스크립트에 사용되는 매개변수는 연관된 매개변수입니다. 스크립트의 대상 (새) 버전으로.

업데이트 메커니즘을 사용하여 중요한 특수 문제를 해결할 수 있습니다. 사례: a를 변환하는 중"느슨한"컬렉션 개체를 롤 토토으로 변환합니다. 롤 토토 메커니즘이 추가되기 전 에포스트그레SQL(9.1에서), 다수 사람들은 단순히 다양한 항목을 생성하는 롤 토토 모듈을 작성했습니다. 포장되지 않은 개체. 그러한 내용을 포함하는 기존 데이터베이스가 주어지면 객체를 어떻게 적절하게 패키지된 객체로 변환할 수 있습니까? 롤 토토? 그것들을 떨어뜨린 다음 일반 작업을 수행합니다.롤 토토 프로그램 만들기일방통행이지만 바람직하지 않습니다 객체에 종속성이 있는 경우(예: 테이블이 있는 경우) 롤 토토 프로그램에 의해 생성된 데이터 유형의 열). 고치는 길 이 상황은 빈 롤 토토을 만든 다음 다음을 사용하는 것입니다.롤 토토 프로그램 변경 추가기존의 각 항목을 첨부하려면 롤 토토에 개체를 지정한 다음 마지막으로 새 개체를 만듭니다. 현재 롤 토토 버전에 있지만 패키지가 해제된 버전에는 없었습니다. 릴리스.롤 토토 프로그램 생성이것을 지원합니다 그 경우발신 old_version옵션, 이로 인해 대상 버전에 대해 일반 설치 스크립트를 실행하지만 대신에 이름이 업데이트 스크립트입니다.롤 토토--old_version--대상_버전.sql. 의 선택 사용할 더미 버전 이름이전_버전롤 토토 프로그램 작성자에게 달려 있습니다. 그래도패키지 해제됨은 일반적인 규칙입니다. 이전 버전이 여러 개인 경우 업데이트할 수 있어야 합니다. 롤 토토 스타일에 여러 더미 버전 이름을 사용하여 식별 그들.

롤 토토 프로그램 변경실행할 수 있습니다 요청된 업데이트를 달성하기 위한 업데이트 스크립트 파일의 시퀀스입니다. 에 대한 예를 들어, 그렇다면foo--1.0--1.1.sql그리고foo--1.1--2.0.sql사용 가능합니다.롤 토토 프로그램 변경다음에 적용하겠습니다. 버전 업데이트인 경우 순서2.0이다 언제 요청함1.0현재 설치되었습니다.

PostgreSQL가정하지 않음 버전 이름의 속성에 관한 모든 것: 예를 들어 여부를 모른다1.1다음과 같습니다1.0. 사용 가능한 것과 일치합니다. 버전 이름을 지정하고 적용이 필요한 경로를 따릅니다. 업데이트 스크립트가 가장 적습니다. (버전 이름은 실제로 어떤 문자열이든 될 수 있습니다. 포함하지 않음--또는 선두 또는 후행-.)

때때로 제공하는 것이 유용합니다"다운그레이드"스크립트, 예를 들어foo--1.1--1.0.sql변경 사항을 되돌릴 수 있도록 허용 버전과 연결됨1.1. 만약 당신이 따라서 다운그레이드 스크립트가 실행될 가능성에 주의하세요. 더 짧은 경로를 생성하기 때문에 예기치 않게 적용됩니다. 는 위험한 경우는 다음과 같습니다."빠르게 경로"다음과 같이 여러 버전보다 앞서가는 업데이트 스크립트 빠른 경로의 시작점에 대한 다운그레이드 스크립트도 있습니다. 어쩌면 다운그레이드를 적용한 다음 빠른 경로를 적용하는 데 더 적은 단계를 수행합니다. 한 번에 한 버전씩 진행합니다. 다운그레이드 스크립트가 삭제되는 경우 대체할 수 없는 개체가 있으면 바람직하지 않은 결과가 발생합니다.

예기치 않은 업데이트 경로를 확인하려면 다음 명령을 사용하십시오:

SELECT * FROM pg_extension_update_paths('롤 토토_이름');

이는 해당 버전에 대해 알려진 고유한 버전 이름의 각 쌍을 보여줍니다. 지정된 롤 토토자와 업데이트 경로 순서 소스 버전에서 대상 버전으로 이동하는 데 사용됩니다. 버전 또는NULL사용 가능한 것이 없는 경우 업데이트 경로. 경로는 다음과 같은 텍스트 형식으로 표시됩니다.--구분자. 당신은 사용할 수 있습니다regexp_split_to_array(경로,'--')당신이 선호하는 경우 배열 형식입니다.

35.15.6. 롤 토토 예

다음은 완전한 예입니다.SQL-전용 롤 토토, 2요소 복합 이름이 지정된 슬롯에 모든 유형의 값을 저장할 수 있는 유형"k"그리고"v". 텍스트가 아닌 값은 저장을 위해 자동으로 텍스트로 강제 변환됩니다.

스크립트 파일pair--1.0.sql외모 이렇게:

-- 스크립트가 CREATE EXTENSION을 통하지 않고 psql에서 제공되는 경우 불평합니다.
\echo 이 파일을 로드하려면 "CREATE EXTENSION 쌍"을 사용하십시오. \그만둬

CREATE TYPE 쌍 AS(k 텍스트, v 텍스트);

함수 쌍 생성 또는 교체(텍스트, 텍스트)
쌍 LANGUAGE SQL을 'SELECT ROW($1, $2)::@extschema@.pair;'로 반환합니다.

CREATE OPERATOR ~ (LEFTARG = 텍스트, RIGHTARG = 텍스트, PROCEDURE = 쌍);

-- "SET search_path"는 이해하기 쉽지만 정규화된 이름은 더 나은 성능을 발휘합니다.
하위(쌍) 함수 생성 또는 교체
반환 LANGUAGE SQL 쌍
AS 'SELECT ROW(lower($1.k), lower($1.v))::@extschema@.pair;'
SET 검색_경로 = pg_temp;

함수 생성 또는 교체 pair_concat(쌍, 쌍)
반환 LANGUAGE SQL 쌍
AS 'SELECT ROW($1.k OPERATOR(pg_catalog.||) $2.k,
               $1.v OPERATOR(pg_catalog.||) $2.v)::@extschema@.pair;';

제어 파일pair.control외모 이렇게:

# 쌍 롤 토토
comment = '키/값 쌍 데이터 유형'
default_version = '1.0'
재배치 가능 = false

이 두 파일을 설치하기 위해 makefile이 거의 필요하지 않지만 올바른 디렉토리이면 a를 사용할 수 있습니다.메이크파일이 내용:

롤 토토 = 쌍
데이터 = 쌍--1.0.sql

PG_CONFIG = pg_config
PGXS := $(쉘 $(PG_CONFIG) --pgxs)
$(PGXS) 포함

이 makefile은 다음에 의존합니다.PGXS, 에 설명되어 있습니다.섹션 35.16. 명령설치하기설치할 것입니다. 보고된 대로 제어 및 스크립트 파일을 올바른 디렉터리에 넣습니다.pg_config.

파일이 설치되면 다음을 사용하십시오.롤 토토 프로그램 생성로드 명령 특정 데이터베이스에 개체를 추가합니다.