유용한 연장postgresql일반적으로 여러 SQL 객체를 포함합니다. 예를 들어, 새로운 데이터 유형에는 새로운 기능, 새로운 연산자 및 아마도 새로운 인덱스 운영자 클래스가 필요합니다. 데이터베이스 관리를 단순화하기 위해 이러한 모든 객체를 단일 패키지로 수집하는 것이 도움이됩니다.PostgreSQL그러한 패키지 호출 an스포츠 토토 베트맨. 스포츠 토토 베트맨을 정의하려면 적어도 A가 필요합니다.스크립트 파일SQLExtension의 객체를 생성하는 명령 및 A제어 파일스포츠 토토 베트맨 자체의 몇 가지 기본 속성을 지정합니다. 스포츠 토토 베트맨자에 C 코드가 포함 된 경우 일반적으로 C 코드가 구축 된 공유 라이브러리 파일도 있습니다. 이 파일이 있으면 간단한스포츠 토토 베트맨 생성명령은 객체를 데이터베이스에로드합니다.
단지 실행하는 대신 스포츠 토토 베트맨을 사용하는 주요 장점SQL스크립트를로드하려면“느슨한”데이터베이스에 대한 객체는입니다.PostgreSQL그런 다음 스포츠 토토 베트맨자의 객체가 함께 있다는 것을 이해합니다. 단일로 모든 객체를 삭제할 수 있습니다드롭 스포츠 토토 베트맨명령 (별도를 유지할 필요 없음“제거”스크립트). 훨씬 더 유용합니다.pg_dump스포츠 토토 베트맨자의 개별 멤버 객체를 덤프해서는 안된다는 것을 알고 있습니다.스포츠 토토 베트맨 생성
대신 덤프로 명령하십시오. 이것은 기존 버전보다 더 많거나 다른 객체를 포함 할 수있는 새로운 버전의 스포츠 토토 베트맨 버전으로의 마이그레이션을 크게 단순화합니다. 그러나 이러한 덤프를 새 데이터베이스에로드 할 때 스포츠 토토 베트맨자의 컨트롤, 스크립트 및 기타 파일을 사용할 수 있어야합니다.
PostgreSQL전체 스포츠 토토 베트맨을 삭제하는 것을 제외하고는 스포츠 토토 베트맨에 포함 된 개별 객체를 삭제하지 못하게합니다. 또한 스포츠 토토 베트맨 멤버 객체의 정의를 변경할 수 있지만 (예 : via함수 생성 또는 교체
함수의 경우), 수정 된 정의는 덤프되지 않을 것임을 명심하십시오pg_dump. 이러한 변경은 일반적으로 스포츠 토토 베트맨자의 스크립트 파일에서 동시에 동일한 변경을하는 경우에만 합리적입니다. (그러나 구성 데이터가 포함 된 테이블에 대한 특별 조항이 있습니다. 참조섹션 37.15.3.) 생산 상황에서는 일반적으로 스포츠 토토 베트맨 업데이트 스크립트를 작성하여 스포츠 토토 베트맨 회원 객체에 대한 변경 사항을 수행하는 것이 좋습니다.
스포츠 토토 베트맨 스크립트는 스포츠 토토 베트맨자의 일부인 객체에서 권한을 설정할 수 있습니다.grant
andRevoke
진술. 각 객체에 대한 최종 권한 세트 (설정된 경우)는에 저장됩니다.PG_INIT_PRIVS
시스템 카탈로그. 언제pg_dump사용됩니다.스포츠 토토 베트맨 생성
명령은 덤프에 포함되며이 뒤 따릅니다.grant
andRevoke
덤프가 취할 때 객체의 권한을 설정하는 데 필요한 진술.
PostgreSQL현재 스포츠 토토 베트맨 스크립트 발행을 지원하지 않습니다정책 작성
또는보안 레이블
진술. 스포츠 토토 베트맨이 만들어진 후에 설정 될 것으로 예상됩니다. 스포츠 토토 베트맨 객체의 모든 RLS 정책 및 보안 레이블은에 의해 생성 된 덤프에 포함됩니다.pg_dump.
스포츠 토토 베트맨 메커니즘에는 스포츠 토토 베트맨에 포함 된 SQL 객체의 정의를 조정하는 포장 수정 스크립트를위한 조항이 있습니다. 예를 들어, 스포츠 토토 베트맨자의 버전 1.1이 하나의 함수를 추가하고 1.0에 비해 다른 함수의 본문을 변경하면 스포츠 토토 베트맨자 저자는를 제공 할 수 있습니다.스크립트 업데이트그 두 가지만 변경합니다. 그만큼Alter Extension Update
명령을 사용하여 이러한 변경 사항을 적용하고 주어진 데이터베이스에 실제로 설치되는 스포츠 토토 베트맨 버전을 추적 할 수 있습니다.
스포츠 토토 베트맨의 구성원이 될 수있는 SQL 객체의 종류는에 표시됩니다.Alter Extension. 특히 데이터베이스, 역할 및 테이블 스페이스와 같이 데이터베이스 클러스터 전체의 객체는 스포츠 토토 베트맨자가 하나의 데이터베이스 내에서만 알려져 있기 때문에 스포츠 토토 베트맨 멤버가 될 수 없습니다. (스포츠 토토 베트맨 스크립트는 그러한 객체를 만드는 데 금지되어 있지 않지만, 그렇다면 스포츠 토토 베트맨의 일부로 추적되지 않을 것입니다.) 또한 테이블은 스포츠 토토 베트맨의 구성원이 될 수 있지만 인덱스와 같은 자회사 객체는 스포츠 토토 베트맨자의 구성원이 직접 고려되지 않습니다. 또 다른 중요한 요점은 스키마가 스포츠 토토 베트맨에 속할 수 있지만 그 반대도 마찬가지입니다. 그와 같은 스포츠 토토 베트맨은 자격이없는 이름을 가지지 않으며 존재하지 않습니다“내”모든 스키마. 그러나 Extension의 멤버 객체는 객체 유형에 적합 할 때마다 스키마에 속합니다. 스포츠 토토 베트맨자가 스키마를 소유하는 것이 멤버 객체가
Extension의 스크립트가 임시 객체 (예 : 임시 테이블)를 생성하는 경우 해당 객체는 현재 세션의 나머지 부분에 대한 스포츠 토토 베트맨 멤버로 처리되지만 임시 객체와 같이 세션 종료시 자동으로 삭제됩니다. 이것은 전체 스포츠 토토 베트맨자를 삭제하지 않고 스포츠 토토 베트맨 멤버 객체를 삭제할 수 없다는 규칙의 예외입니다.
the스포츠 토토 베트맨 생성명령은 각 스포츠 토토 베트맨자의 제어 파일에 의존하며, 접미사의 접미사와 동일하게 명명되어야합니다.control
Sharedir/Extension
디렉토리. 적어도 하나가 있어야합니다SQL이름 지정 패턴을 따르는 스크립트 파일
(예 :스포츠 토토 베트맨
--버전
.SQLfoo--1.0.sql
버전1.0
스포츠 토토 베트맨foo
). 기본적으로 스크립트 파일도에 배치됩니다.Sharedir/Extension
디렉토리; 그러나 제어 파일은 스크립트 파일의 다른 디렉토리를 지정할 수 있습니다.
스포츠 토토 베트맨 제어 파일의 파일 형식은와 동일합니다.postgresql.conf
파일, 즉 목록parameter_name
=
value
한 줄 당 과제. 빈 줄과 댓글이 소개#
허용됩니다. 단일 단어 나 숫자가 아닌 값을 인용하십시오.
컨트롤 파일은 다음 매개 변수를 설정할 수 있습니다.
디렉토리
(String
)Extension 's를 포함하는 디렉토리SQL스크립트 파일. 절대 경로가 주어지지 않는 한 이름은 설치와 관련이 있습니다Sharedir
디렉토리. 기본 동작은 지정과 동일합니다directory = 'Extension'
.
default_version
(String
)Extension의 기본 버전 (버전이 지정되지 않은 경우 설치되는 버전스포츠 토토 베트맨 생성
). 이것은 생략 될 수 있지만, 그 결과스포츠 토토 베트맨 생성
아니오이면 실패버전
옵션이 나타나므로 일반적으로 그렇게하고 싶지 않습니다.
댓글
(String
)스포츠 토토 베트맨에 대한 주석 (모든 문자열). 주석은 처음에 스포츠 토토 베트맨자를 만들 때 적용되지만 스포츠 토토 베트맨 업데이트 중에는 그렇지 않습니다 (사용자 지원 주석을 무시할 수 있으므로). 또는 Extension의 주석은 A를 작성하여 설정할 수 있습니다.댓글스크립트 파일의 명령.
인코딩
(String
)스크립트 파일에서 사용하는 문자 세트 인코딩. 스크립트 파일에 ASCII가 아닌 문자가 포함 된 경우 지정해야합니다. 그렇지 않으면 파일이 데이터베이스 인코딩에있는 것으로 가정됩니다.
module_pathname
(String
)이 매개 변수의 값은 각 발생마다 대체됩니다module_pathname
스크립트 파일에서. 설정되지 않으면 치환이 이루어지지 않습니다. 일반적으로 이것은로 설정됩니다.$ libdir/
그리고shared_library_name
module_pathname
함수 만들기
C- 언어 함수에 대한 명령, 스크립트 파일이 공유 라이브러리의 이름을 하드 와이어 할 필요가 없도록합니다.
요구
(String
)예를 들어이 스포츠 토토 베트맨자가 의존하는 스포츠 토토 베트맨 이름 목록요구 = 'foo, bar'
. 이 스포츠 토토 베트맨은이 스포츠 토토 베트맨을 설치하기 전에 설치해야합니다.
SuperUser
(부울
)이 매개 변수 인 경우true
(기본값), 슈퍼 사용자 만 스포츠 토토 베트맨자 만 만들거나 새 버전으로 업데이트 할 수 있습니다. 로 설정된 경우거짓
, 설치 또는 업데이트 스크립트에서 명령을 실행하는 데 필요한 권한 만 필요합니다.
rejocatable
(부울
)스포츠 토토 베트맨자는rejocatable스포츠 토토 베트맨을 초기 생성 후 포함 된 객체를 다른 스키마로 이동할 수 있다면. 기본값은거짓
, 즉 스포츠 토토 베트맨은 재배치 할 수 없습니다. 보다섹션 37.15.2자세한 내용은
스키마
(String
)이 매개 변수는 재생 불가능한 스포츠 토토 베트맨에 대해서만 설정할 수 있습니다. 그것은 스포츠 토토 베트맨이 명명 된 스키마에 정확히로드되도록 강요합니다. 그만큼스키마
매개 변수는 스포츠 토토 베트맨 업데이트가 아닌 연장을 생성 할 때만 참고됩니다. 보다섹션 37.15.2자세한 내용은
기본 제어 파일 외에
, 스포츠 토토 베트맨자는 스타일에 이름이 지정된 2 차 제어 파일을 가질 수 있습니다스포츠 토토 베트맨
.control
. 제공된 경우 스크립트 파일 디렉토리에 있어야합니다. 보조 제어 파일은 기본 제어 파일과 동일한 형식을 따릅니다. 보조 제어 파일에 설정된 모든 매개 변수는 해당 버전의 스포츠 토토 베트맨 버전을 설치하거나 업데이트 할 때 기본 제어 파일을 무시합니다. 그러나 매개 변수스포츠 토토 베트맨
--버전
.control디렉토리
및default_version
보조 제어 파일로 설정할 수 없습니다.
스포츠 토토 베트맨자SQL스크립트 파일은 트랜잭션 제어 명령을 제외하고는 SQL 명령을 포함 할 수 있습니다 (시작
, 커밋
등) 및 트랜잭션 블록 내에서 실행할 수없는 명령 (예 :진공
). 스크립트 파일이 트랜잭션 블록 내에서 암시 적으로 실행되기 때문입니다.
스포츠 토토 베트맨자SQL스크립트 파일은로 시작하는 줄도 포함 할 수 있습니다\ echo
, 스포츠 토토 베트맨 메커니즘에 의해 무시 될 (주석으로 취급). 이 조항은 일반적으로 스크립트 파일에 공급되는 경우에 오류를 던지는 데 사용됩니다.PSQL스포츠 토토 베트맨 생성
(예제 스크립트 참조섹션 37.15.7). 그 없이는 사용자가 실수로 Extension의 내용을로드 할 수 있습니다.“느슨한”연장이 아닌 물체, 회복하기가 약간 지루한 상황입니다.
스크립트 파일에는 지정된 인코딩에서 허용되는 문자가 포함될 수 있지만 제어 파일은 일반 ASCII 만 포함해야합니다.PostgreSQL컨트롤 파일을 인코딩하는 것이 무엇인지 알기 위해. 실제로 이것은 Extension의 주석에서 비 ASCII 문자를 사용하려는 경우에만 문제가됩니다. 이 경우 권장되는 관행은 제어 파일을 사용하지 않는 것입니다댓글
매개 변수이지만 대신 사용스포츠 토토 베트맨에 대한 의견
주석을 설정하는 스크립트 파일 내에서.
사용자는 종종 스포츠 토토 베트맨에 포함 된 개체를 Extension의 저자가 생각했던 것과 다른 스키마에로드하려고합니다. 3 가지 지원 수준의 재배치 성이 있습니다.
데이터베이스에로드 된 후에도 완전히 재배치 가능한 스포츠 토토 베트맨을 다른 스키마로 이동할 수 있습니다. 이것은와 함께 이루어집니다.Alter Extension Set Schema
명령은 모든 멤버 객체를 새 스키마로 자동 이름을 바꿉니다. 일반적으로 이것은 스포츠 토토 베트맨에 해당 객체에 어떤 스키마에 대한 내부 가정이 포함되어 있지 않은 경우에만 가능합니다. 또한 스포츠 토토 베트맨자의 객체는 하나의 스키마에 있어야합니다 (절차 언어와 같은 스키마에 속하지 않는 객체를 무시 함). 설정하여 완전히 재배치 가능한 스포츠 토토 베트맨을 표시rejocatable = true
제어 파일의
스포츠 토토 베트맨은 설치 중에 재배치 할 수 있지만 나중에는 그렇지 않을 수 있습니다. 이것은 일반적으로 스포츠 토토 베트맨자의 스크립트 파일이 대상 스키마를 명시 적으로 참조 해야하는 경우, 예를 들어 설정입니다.search_path
SQL 함수의 속성. 그러한 연장을 위해rejocatable = false
제어 파일에서@extschema@
스크립트 파일의 대상 스키마를 참조합니다. 이 문자열의 모든 발생은 스크립트가 실행되기 전에 실제 대상 스키마의 이름으로 대체됩니다. 사용자는를 사용하여 대상 스키마를 설정할 수 있습니다.스키마
옵션스포츠 토토 베트맨 생성
.
스포츠 토토 베트맨자가 재배치를 전혀 지원하지 않으면 설정rejocatable = false
제어 파일에서스키마
의도 된 대상 스키마의 이름으로. 이것은의 사용을 방지 할 것입니다.스키마
옵션스포츠 토토 베트맨 생성
, 제어 파일에 이름이 지정된 동일한 스키마를 지정하지 않는 한. 이 선택은 일반적으로 스포츠 토토 베트맨자에 |@extschema@
. 그만큼@extschema@
스키마 이름이 제어 파일에 의해 결정되기 때문에 제한된 사용이지만이 경우에도 대체 메커니즘을 사용할 수 있습니다..
모든 경우 스크립트 파일은로 실행됩니다.search_path처음에는 대상 스키마를 가리 키도록 설정했습니다. 즉,스포츠 토토 베트맨 생성
이것과 동일합니다 :
로컬 Search_Path를 @extschema @, pg_temp;에 설정하십시오.
스크립트 파일에서 만든 객체가 대상 스키마로 이동할 수 있습니다. 스크립트 파일이 변경 될 수 있습니다search_path
원하는 경우 일반적으로 바람직하지 않습니다.search_path
완료되면 이전 설정으로 복원되었습니다스포츠 토토 베트맨 생성
.
대상 스키마는에 의해 결정됩니다.스키마
제어 파일의 매개 변수가 제공되는 경우.스키마
옵션스포츠 토토 베트맨 생성
주어진 경우, 그렇지 않으면 현재 기본 객체 생성 스키마 (발신자의 첫 번째 객체search_path
). 컨트롤 파일스키마
매개 변수가 사용되면 대상 스키마가 아직 존재하지 않으면 대상 스키마가 생성되지만 다른 두 경우에는 이미 존재해야합니다.
전제 조건 스포츠 토토 베트맨이 나열된 경우요구
제어 파일에서 대상 스키마가의 초기 설정에 추가됩니다.search_path
, 새로운 스포츠 토토 베트맨자의 대상 스키마에 따라. 이를 통해 해당 객체가 새로운 Extension의 스크립트 파일에 표시 될 수 있습니다.
보안 용PG_TEMP
| 끝까지 자동으로 추가됩니다search_path
모든 경우에.
relocatable 스포츠 토토 베트맨에는 여러 schemas에 퍼져있는 객체를 포함 할 수 있지만, 외부 사용을위한 모든 객체를 단일 스키마에 배치하는 것이 바람직합니다. 이러한 배열은 기본 설정과 편리하게 작동합니다.search_path
의존적 스포츠 토토 베트맨을 생성하는 동안.
일부 스포츠 토토 베트맨에는 스포츠 토토 베트맨자 설치 후 사용자가 추가하거나 변경할 수있는 데이터가 포함 된 구성 테이블이 포함됩니다. 일반적으로 테이블이 스포츠 토토 베트맨자의 일부인 경우 테이블의 정의 나 콘텐츠가 덤프되지 않습니다.pg_dump. 그러나 그 동작은 구성 테이블의 경우 바람직하지 않습니다. 사용자의 모든 데이터 변경은 덤프에 포함되어야합니다. 그렇지 않으면 덤프 및 재 장전 후에 스포츠 토토 베트맨이 다르게 행동합니다.
이 문제를 해결하기 위해 스포츠 토토 베트맨자의 스크립트 파일은 구성 관계로 작성된 테이블 또는 시퀀스를 표시 할 수 있습니다.pg_dump덤프에 테이블 또는 시퀀스의 내용 (정의가 아님)을 포함합니다. 그렇게하려면 함수를 호출하십시오pg_extension_config_dump (regclass, text)
예를 들어 테이블 또는 시퀀스를 작성한 후
테이블 작성 my_config (키 텍스트, 값 텍스트); 시퀀스를 만듭니다. my_config_seq; pg_catalog.pg_extension_config_dump ( 'my_config', '')을 선택하십시오. pg_catalog.pg_extension_config_dump를 선택하십시오 ( 'my_config_seq', '');
여러 테이블이나 시퀀스 가이 방식으로 표시 될 수 있습니다. 관련 시퀀스Serial
또는bigserial
열도 표시 될 수 있습니다.
두 번째 인수의 논쟁이있을 때pg_extension_config_dump
빈 문자열입니다. 테이블의 전체 내용은 |pg_dump. 이는 일반적으로 테이블이 Extension 스크립트에서 생성 된대로 비어있는 경우에만 정확합니다. 표에 초기 데이터와 사용자 제공 데이터가 혼합되어있는 경우의 두 번째 인수는pg_extension_config_dump
제공 a여기서
덤프 할 데이터를 선택하는 조건. 예를 들어, 할 수 있습니다
테이블 작성 my_config (키 텍스트, 값 텍스트, Standard_Entry boolean); pg_catalog.pg_extension_config_dump를 선택하십시오 ( 'my_config', 'standard_entry가 아닌 곳');
그런 다음Standard_Entry
Extension의 스크립트에 의해 생성 된 행에서만 사실입니다.
시퀀스의 경우의 두 번째 인수pg_extension_config_dump
효과가 없습니다.
사용자가 수정할 수있는 초기에 제공되는 행과 같은 더 복잡한 상황은 구성 테이블에서 트리거를 작성하여 수정 된 행이 올바르게 표시되도록하여 처리 할 수 있습니다.
호출하여 구성 테이블과 관련된 필터 조건을 변경할 수 있습니다pg_extension_config_dump
다시. (이것은 일반적으로 스포츠 토토 베트맨 업데이트 스크립트에서 유용합니다.) 구성 테이블이 더 이상 테이블을 표시하는 유일한 방법은를 사용하여 스포츠 토토 베트맨자에서 해리하는 것입니다.Alter Extension ... 드롭 테이블
.
이 테이블 사이의 외국 주요 관계는 PG_DUMP에 의해 테이블이 버려지는 순서를 결정합니다. 구체적으로, pg_dump는 참조 테이블 전에 참조 표를 덤프하려고 시도합니다. 외국의 주요 관계가 Create Extension Time (테이블에로드하기 전에)에서 설정되면 원형 의존성은 지원되지 않습니다. 원형 의존성이 존재하면 데이터는 여전히 덤프되지만 덤프는 직접 복원 할 수 없으며 사용자 개입이 필요합니다.
관련 시퀀스Serial
또는bigserial
열을 직접 표시하려면 직접 표시해야합니다. 부모 관계를 표시하는 것만으로는 충분하지 않습니다.
스포츠 토토 베트맨 메커니즘의 한 가지 장점은 스포츠 토토 베트맨자의 개체를 정의하는 SQL 명령에 대한 업데이트를 관리하는 편리한 방법을 제공한다는 것입니다. 이는 버전 이름 또는 번호를 각각의 릴리스 버전의 Extension 설치 스크립트와 연결하여 수행됩니다. 또한 사용자가 데이터베이스를 한 버전에서 다음 버전으로 동적으로 업데이트하려면 제공해야합니다.스크립트 업데이트로서 한 버전에서 다음 버전으로 이동하는 데 필요한 변경을합니다. 업데이트 스크립트는 패턴에 따른 이름이 있습니다
(예 :스포츠 토토 베트맨
--Old_version
--target_version
.SQLfoo--1.0--1.1.sql
버전을 수정하는 명령을 포함합니다1.0
스포츠 토토 베트맨foo
버전1.1
).
적절한 업데이트 스크립트를 사용할 수 있다는 점에서 명령Alter Extension Update
지정된 새 버전으로 설치된 스포츠 토토 베트맨자를 업데이트합니다. 업데이트 스크립트는와 같은 환경에서 실행됩니다.스포츠 토토 베트맨 생성
설치 스크립트 제공 : 특히,search_path
같은 방식으로 설정되며 스크립트에서 생성 된 새 개체는 스포츠 토토 베트맨자에 자동으로 추가됩니다. 또한 스크립트가 스포츠 토토 베트맨 멤버 객체를 삭제하기로 선택하면 스포츠 토토 베트맨자에서 자동으로 분리됩니다.
스포츠 토토 베트맨자에 보조 제어 파일이 있으면 업데이트 스크립트에 사용되는 제어 매개 변수는 스크립트의 대상 (신규) 버전과 관련된 것입니다..
업데이트 메커니즘을 사용하여 중요한 특수 사례를 해결할 수 있습니다. 변환“느슨한”스포츠 토토 베트맨자로 개체 수집. 스포츠 토토 베트맨 메커니즘이 추가되기 전에PostgreSQL(9.1), 많은 사람들은 단순히 모듬되지 않은 객체를 만들어내는 스포츠 토토 베트맨 모듈을 작성했습니다. 이러한 객체가 포함 된 기존 데이터베이스가 주어지면 객체를 올바르게 포장 된 스포츠 토토 베트맨자로 어떻게 변환 할 수 있습니까? 그들을 떨어 뜨린 다음 평범한 일을합니다스포츠 토토 베트맨 생성
는 한 가지 방법이지만 객체에 종속성이있는 경우 바람직하지 않습니다 (예 : 스포츠 토토 베트맨자에 의해 생성 된 데이터 유형의 테이블 열이있는 경우). 이 상황을 해결하는 방법은 빈 연장을 만들고 사용하는 것입니다Alter Extension Add
각 기존 객체를 스포츠 토토 베트맨자에 첨부 한 다음 마지막으로 현재 스포츠 토토 베트맨 버전에 있지만 포장되지 않은 릴리스에 있지 않은 새 개체를 만듭니다.스포츠 토토 베트맨 생성
이 사례를 그와 함께 지원합니다From
Old_version
37804_37933
. as as를 사용할 더미 버전 이름의 선택스포츠 토토 베트맨
--Old_version
--target_version
.SQLOld_version
그러나 스포츠 토토 베트맨자에 달려 있지만포장되지 않은
는 일반적인 협약입니다. 여러 이전 버전이있는 경우 스포츠 토토 베트맨 스타일로 업데이트 할 수 있어야합니다. 여러 더미 버전 이름을 사용하여 식별하십시오.
연장
요청 된 업데이트를 달성하기 위해 업데이트 스크립트 파일 시퀀스를 실행할 수 있습니다. 예를 들어, 만foo--1.0--1.1.sql
andfoo--1.1-2.0.sql
사용 가능,Alter Extension
버전 업데이트가있는 경우 순서대로 적용2.0
요청됩니다1.0
현재 설치되었습니다.
PostgreSQL버전 이름의 속성에 대해 아무것도 가정하지 않습니다 : 예를 들어,1.1
다음1.0
. 사용 가능한 버전 이름과 일치하고 가장 적은 업데이트 스크립트를 적용 해야하는 경로를 따릅니다. (버전 이름은 실제로 포함하지 않는 문자열 일 수 있습니다--
또는 선도 또는 후행-
.)
때로는 제공하는 것이 유용합니다“다운 그레이드”스크립트, 예를 들어foo--1.1--1.0.sql
버전과 관련된 변경 사항을 되돌릴 수 있도록1.1
. 그렇게하면 더 짧은 경로를 생성하기 때문에 다운 그레이드 스크립트가 예기치 않게 적용될 가능성에주의하십시오. 위험한 사례는 A가있는 곳입니다.“빠른 경로”Fast Path의 시작점으로의 다운 그레이드 스크립트뿐만 아니라 여러 버전을 뛰어 넘는 스크립트를 업데이트하십시오. 한 번에 하나의 버전을 이동하는 것보다 다운 그레이드를 적용하고 빠른 경로를 적용하는 데 더 적은 단계가 필요할 수 있습니다. 다운 그레이드 스크립트가 대체 할 수없는 객체를 떨어 뜨리면 바람직하지 않은 결과를 얻을 수 있습니다.
예상치 못한 업데이트 경로를 확인하려면이 명령을 사용하십시오.
선택 *에서 pg_extension_update_paths ( 'Extension_name
');
이것은 소스 버전에서 대상 버전으로 이동하기 위해 가져올 업데이트 경로 시퀀스와 함께 지정된 스포츠 토토 베트맨자에 대한 별개의 알려진 버전 이름 쌍을 보여줍니다.NULL
사용 가능한 업데이트 경로가없는 경우. 경로는 텍스트 형식으로 표시됩니다.--
분리기. 사용할 수 있습니다regexp_split_to_array (path, '-')
배열 형식을 선호하는 경우
잠시 동안 주변에 있었던 스포츠 토토 베트맨자는 아마도 여러 버전으로 존재할 것이며, 저자는 업데이트 스크립트를 작성해야합니다. 예를 들어, a를 출시 한 경우foo
버전의 스포츠 토토 베트맨1.0
, 1.1
및1.2
, 업데이트 스크립트가 있어야합니다foo--1.0--1.1.sql
andfoo--1.1-1.2.sql
. 전에PostgreSQL10, 새 스크립트 파일도 만들어야했습니다foo--1.1.sql
및foo--1.2.sql
최신 스포츠 토토 베트맨 버전을 직접 구축하거나 다른 최신 버전을 설치하여 직접 설치할 수는 없습니다1.0
그런 다음 업데이트. 그것은 지루하고 복제 적 이었지만 지금은 불필요합니다. 왜냐하면스포츠 토토 베트맨 생성
업데이트 체인을 자동으로 팔로우 할 수 있습니다. 예를 들어, 스크립트 파일 만foo--1.0.sql
, foo--1.0--1.1.sql
및foo--1.1-1.2.sql
이용 가능 한 다음 버전 설치 요청1.2
3 개의 스크립트를 순서대로 실행하여 영광입니다. 처리는 처음 설치 한 것과 동일합니다1.0
그런 다음 업데이트1.2
. (Alter Extension Update
, 여러 경로를 사용할 수 있으면 가장 짧은 경로가 선호됩니다.)이 스타일의 Extension의 스크립트 파일을 정리하면 작은 업데이트를 생성하는 데 필요한 유지 보수 노력의 양을 줄일 수 있습니다.
이 스타일로 스포츠 토토 베트맨 상태가 유지되는 Secondary (버전 특정) 제어 파일을 사용하는 경우 각 버전에는 독립형 설치 스크립트가 없더라도 각 버전에 제어 파일이 필요합니다. 해당 제어 파일이 해당 버전에 대한 암시 적 업데이트가 수행되는 방법을 결정할 것입니다. 예를 들어, iffoo--1.0.control
지정요구 사항 = 'bar'
그러나foo
'의 다른 제어 파일은 그렇지 않습니다. Extension의 종속성은bar
에서 업데이트 할 때 삭제됩니다1.0
다른 버전으로.
광범위하게 분산 된 스포츠 토토 베트맨은 그들이 차지하는 데이터베이스에 대해 거의 가정하지 않아야합니다. 따라서 검색 경로 기반 공격으로 손상 될 수없는 안전한 스타일로 스포츠 토토 베트맨 기능을 제공하는 기능을 작성하는 것이 적절합니다.
SuperUser
true로 설정된 속성은 또한 설치 및 업데이트 스크립트 내에서 수행 된 작업에 대한 보안 위험을 고려해야합니다. 악의적 인 사용자가 나중에 부주의하게 작성된 스포츠 토토 베트맨 스크립트의 실행을 손상시킬 Trojan-Horse 객체를 만드는 것은별로 어렵지 않습니다. 해당 사용자는 슈퍼 사용자 권한을 획득 할 수 있습니다..
작문 기능에 대한 조언은 안전하게 제공됩니다섹션 37.15.6.1아래, 설치 스크립트 작성에 대한 조언은 단단히 제공됩니다섹션 37.15.6.2.
스포츠 토토 베트맨에 의해 제공되는 SQL 언어 및 PL- 언어 함수는 실행 시간에 발생하기 때문에 검색 경로 기반 공격의 위험에 처해 있습니다..
the기능 생성
참조 페이지 작성에 대한 조언이 포함되어 있습니다보안 정의기
안전하게 기능합니다. 기능을 고급 사용자가 호출 할 수 있으므로 스포츠 토토 베트맨자가 제공하는 기능에 해당 기술을 적용하는 것이 좋습니다.
설정할 수없는 경우search_path
보안 스키마 만 포함하기 위해, 각 자격이없는 이름이 악의적 인 사용자가 정의한 개체로 해결 될 수 있다고 가정합니다. 의존하는 구성을 조심하십시오search_path
암시 적으로; 예를 들어,in
andCASE
항상 검색 경로를 사용하여 연산자를 선택하십시오. 그들의 대신 사용표현
언제연산자 (
and스키마
. =) any케이스시기
.표현
일반 목적 스포츠 토토 베트맨은 일반적으로 보안 스키마에 설치되었다고 가정해서는 안됩니다. 즉, 자체 객체에 대한 스키마 자격을 갖춘 참조조차도 완전히 위험이 없습니다. 예를 들어, 스포츠 토토 베트맨자가 함수를 정의한 경우myschema.myfunc (bigint)
그런 다음myschema.myfunc (42)
적대적인 기능으로 캡처 할 수 있습니다myschema.myfunc (Integer)
. 기능 및 연산자 매개 변수의 데이터 유형이 필요한 경우 명시 적 캐스트를 사용하여 선언 된 인수 유형과 정확히 일치하도록 조심하십시오.
스크립트가 실행될 때 발생하는 검색 경로 기반 공격을 방지하기 위해 스포츠 토토 베트맨 설치 또는 업데이트 스크립트를 작성해야합니다. 스크립트의 객체 참조를 스크립트 작성자보다 다른 객체로 해결하도록 만들 수있는 경우, 잘못 정의 된 스포츠 토토 베트맨 객체가 사용될 때 즉시 또는 나중에 타협이 발생할 수 있습니다..
remods기능 생성
and운영자 클래스 생성
일반적으로 안전하지만 구성 요소로서 일반 목적 표현을 갖는 명령을 조심하십시오. 예를 들어,보기 만들기
a와 마찬가지로 조사해야합니다.기본값
expression in기능 생성
.
때로는 스포츠 토토 베트맨 스크립트가 DDL을 통해 불가능한 카탈로그 조정을 위해서는 일반 목적 SQL을 실행해야 할 수도 있습니다. 보안으로 그러한 명령을 실행하도록주의하십시오search_path
; 하다not스포츠 토토 베트맨 생성/변경
보안. 모범 사례는 일시적으로 설정하는 것입니다search_path
to'PG_CATALOG, PG_TEMP'
및 필요한 경우 Extension의 설치 스키마에 대한 참조를 삽입하십시오. (이 관행은보기를 만드는 데 도움이 될 수 있습니다.) 예제는에서 찾을 수 있습니다.Contrib
모듈의PostgreSQL소스 코드 배포.
교차 스포츠 토토 베트맨 참조는 다른 스포츠 토토 베트맨이 어떤 스키마에 있는지에 대한 불확실성 때문에 부분적으로 완전히 안전하게 만드는 것은 극히 어렵습니다. 동일한 스키마에 모든 스포츠 토토 베트맨이 설치되면 위험이 줄어 듭니다.search_path
. 그러나 현재이를 요구하는 메커니즘이 존재하지 않습니다.
여기에 완전한 예가 있습니다SQL-슬롯에 모든 유형의 값을 저장할 수있는 2 가지 요소 복합 유형 인 연장“K”및“V”. 비 텍스트 값은 스토리지 용 텍스트로 자동 강요됩니다.
스크립트 파일쌍-1.0.sql
다음과 같습니다.
- 스크립트가 PSQL에 소스가 생성 된 스포츠 토토 베트맨자가 아닌 PSQL에 제공되는 경우 불만 사항 \ echo는 "스포츠 토토 베트맨 쌍을 만들기 위해"만들기 "를로드합니다. \그만두다 (k text, v text)로 유형 쌍을 만듭니다. 기능 쌍 만들기 (텍스트, 텍스트) 쌍 언어 SQL을 'select row ($ 1, $ 2) ::@extschema@.pair;'로 반환합니다. 연산자 생성 ~ (leftarg = text, rightarg = text, procedure = pair); - "set search_path"는 쉽게 얻을 수 있지만 자격을 갖춘 이름은 더 잘 수행됩니다. 기능 생성 (쌍) 쌍 언어 SQL을 반환합니다 'select row (하위 ($ 1.K), Lower ($ 1.V)) ::@extschema@.pair;' SET SEARCH_PATH = PG_TEMP; 함수 생성 pair_concat (쌍, 쌍) 쌍 언어 SQL을 반환합니다 AS 'select row ($ 1.K 운영자 (PG_CATALOG. ||) $ 2.K, $ 1.V Operator (PG_CATALOG. ||) $ 2.V) ::@extschema@.pair; ';
제어 파일pair.control
다음과 같이 보입니다 :
# 쌍 스포츠 토토 베트맨 댓글 = '키/값 쌍 데이터 유형' default_version = '1.0' # extschema @의 사용으로 인해 # 재배치 할 수 없습니다. regocatable = false
이 두 파일을 올바른 디렉토리에 설치하려면 makefile이 거의 필요하지 않지만 A를 사용할 수 있습니다.makefile
이것을 포함 :
Extension = 쌍 데이터 = 쌍-1.0.sql pg_config = pg_config pgxs : = $ (shell $ (pg_config) --pgxs) $ (pgxs) 포함
이 makefile의 의존PGXS,섹션 37.16. 명령설치
|PG_CONFIG.
파일이 설치되면를 사용하십시오.스포츠 토토 베트맨 생성객체를 특정 데이터베이스에로드하도록 명령.