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

35.15. 관련 객체를 토토 결과으로 패키징

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

단순히 실행하는 것보다 토토 결과 프로그램을 사용하는 것의 주요 이점SQL다발을 로드하는 스크립트"느슨한"개체를 데이터베이스에 추가하는 것입니다.포스트그레SQL그러면 토토 결과의 개체가 함께 작동한다는 것을 이해할 것입니다. 단일로 모든 객체를 삭제할 수 있습니다.삭제 토토 결과명령(별도 유지관리 필요 없음"제거"스크립트). 더욱 유용합니다.pg_dump토토 결과 프로그램의 개별 구성원 개체를 덤프해서는 안 된다는 것을 알고 있습니다. 단지 다음을 포함할 것입니다.토토 결과 프로그램 만들기11102_11402

포스트그레SQL전체 토토 결과을 삭제하는 경우를 제외하고는 토토 결과에 포함된 개별 개체를 삭제할 수 없습니다. 또한 토토 결과 멤버 객체의 정의를 변경할 수도 있지만(예: via함수 생성 또는 교체함수), 수정된 정의는 다음에 의해 덤프되지 않는다는 점을 명심하세요.pg_dump. 이러한 변경은 일반적으로 토토 결과 프로그램의 스크립트 파일에서 동일한 변경을 동시에 수행하는 경우에만 의미가 있습니다. (그러나 구성 데이터가 포함된 테이블에는 특별한 조항이 있습니다. 아래를 참조하세요.)

토토 결과 메커니즘에는 토토 결과에 포함된 SQL 개체의 정의를 조정하는 수정 스크립트 패키징을 위한 조항도 있습니다. 예를 들어 토토 결과 프로그램 버전 1.1이 1.0과 비교하여 하나의 함수를 추가하고 다른 함수의 본문을 변경하는 경우 토토 결과 프로그램 작성자는업데이트 스크립트이 두 가지만 변경합니다.토토 결과 업데이트 변경12468_12602

토토 결과 프로그램의 구성원이 될 수 있는 SQL 개체의 종류는 다음에 대한 설명에 표시됩니다.토토 : 문서 : 9.4. 특히 데이터베이스, 역할, 테이블스페이스 등 데이터베이스 클러스터 전체에 적용되는 개체는 토토 결과 멤버가 될 수 없습니다. 토토 결과은 하나의 데이터베이스 내에서만 알려져 있기 때문입니다. (토토 결과 스크립트가 이러한 개체를 만드는 것이 금지되지는 않지만 그렇게 하면 토토 결과의 일부로 추적되지 않습니다.) 또한 테이블은 토토 결과의 멤버가 될 수 있지만 인덱스와 같은 보조 개체는 토토 결과의 멤버로 직접 간주되지는 않습니다. 또 다른 중요한 점은 스키마가 토토 결과에 속할 수 있지만 그 반대는 가능하지 않다는 것입니다. 토토 결과과 같은 토토 결과은 정규화되지 않은 이름을 가지며 존재하지 않습니다."내부"모든 스키마. 그러나 토토 결과의 구성원 개체는 해당 개체 유형에 적합할 때마다 스키마에 속합니다. 토토 결과 프로그램이 해당 구성원 개체가 포함된 스키마를 소유하는 것은 적절할 수도 있고 적합하지 않을 수도 있습니다.

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스크립트 파일. 절대 경로가 제공되지 않는 한 이름은 설치 경로를 기준으로 합니다.공유디르디렉토리. 기본 동작은 다음을 지정하는 것과 동일합니다.디렉토리 = '토토 결과'.

default_version (문자열)

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

댓글 (문자열)

토토 결과 프로그램에 대한 설명(모든 문자열). 또는 다음을 사용하여 주석을 설정할 수 있습니다.댓글스크립트 파일의 명령.

인코딩 (문자열)

스크립트 파일에 사용되는 문자 세트 인코딩. 스크립트 파일에 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제공어디27707_27781

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 명령에 대한 업데이트를 관리하는 편리한 방법을 제공한다는 것입니다. 이는 버전 이름이나 번호를 토토 결과 설치 스크립트의 릴리스된 각 버전과 연결하여 수행됩니다. 또한 사용자가 한 버전에서 다음 버전으로 데이터베이스를 동적으로 업데이트할 수 있도록 하려면 다음을 제공해야 합니다.업데이트 스크립트한 버전에서 다음 버전으로 이동하는 데 필요한 변경을 수행합니다. 업데이트 스크립트에는 패턴을 따르는 이름이 있습니다.토토 결과--old_version--대상_버전.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이 거의 필요하지 않지만 다음을 사용할 수 있습니다.메이크파일이 내용:

토토 결과 = 쌍
데이터 = 쌍--1.0.sql

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

이 makefile은 다음에 의존합니다.PGXS, 설명된 내용은섹션 35.16. 명령설치하기다음에서 보고한 대로 올바른 디렉토리에 제어 및 스크립트 파일을 설치합니다.pg_config.

파일이 설치되면 다음을 사용하세요.PostgreSQL : 문서개체를 특정 데이터베이스에 로드하는 명령입니다.