유용한 스포츠 토토 베트맨PostgreSQL일반적으로 여러 SQL 개체를 포함합니다. 예를 들어, 새로운 데이터 유형에는 새로운 함수, 새로운 연산자, 그리고 아마도 새로운 인덱스 연산자 클래스가 필요할 것입니다. 데이터베이스 관리를 단순화하려면 이러한 모든 객체를 단일 패키지로 수집하는 것이 도움이 됩니다.PostgreSQL그러한 패키지를 호출합니다.스포츠 토토 베트맨. 스포츠 토토 베트맨을 정의하려면 최소한 a가 필요합니다.스크립트 파일다음을 포함하는SQL스포츠 토토 베트맨 개체를 생성하는 명령 및 a제어 파일스포츠 토토 베트맨 자체의 몇 가지 기본 속성을 지정합니다. 스포츠 토토 베트맨에 C 코드가 포함된 경우 일반적으로 C 코드가 빌드된 공유 라이브러리 파일도 있습니다. 이러한 파일이 있으면 간단한스포츠 토토 베트맨 프로그램 생성명령은 개체를 데이터베이스에 로드합니다.
단순히 실행하는 것보다 스포츠 토토 베트맨 프로그램을 사용하는 것의 주요 이점SQL다발을 로드하는 스크립트“느슨한”객체를 데이터베이스에 추가하는 것입니다.PostgreSQL그러면 스포츠 토토 베트맨의 개체가 함께 작동한다는 것을 이해할 것입니다. 단일로 모든 객체를 삭제할 수 있습니다.드롭 스포츠 토토 베트맨명령(별도를 유지할 필요가 없음“제거”스크립트). 더욱 유용합니다.pg_dump스포츠 토토 베트맨의 개별 구성원 개체를 덤프해서는 안 된다는 것을 알고 있습니다. 단지 다음을 포함할 것입니다.스포츠 토토 베트맨 프로그램 만들기12669_12969
PostgreSQL전체 스포츠 토토 베트맨을 삭제하는 경우를 제외하고는 스포츠 토토 베트맨에 포함된 개별 개체를 삭제할 수 없습니다. 또한 스포츠 토토 베트맨 멤버 객체의 정의를 변경할 수도 있지만(예: via함수 생성 또는 교체함수), 수정된 정의는 다음에 의해 덤프되지 않는다는 점을 명심하세요.pg_dump. 이러한 변경은 일반적으로 스포츠 토토 베트맨 프로그램의 스크립트 파일에서 동일한 변경을 동시에 수행하는 경우에만 의미가 있습니다. (그러나 구성 데이터가 포함된 테이블에 대한 특별한 조항이 있습니다. 참조섹션 37.15.3.) 프로덕션 상황에서는 일반적으로 스포츠 토토 베트맨 업데이트 스크립트를 생성하여 스포츠 토토 베트맨 구성원 개체를 변경하는 것이 좋습니다.
스포츠 토토 베트맨 스크립트는 다음을 사용하여 스포츠 토토 베트맨의 일부인 개체에 대한 권한을 설정할 수 있습니다.그랜트그리고취소문장. 각 객체에 대한 최종 권한 세트(설정된 경우)는pg_init_privs시스템 카탈로그. 언제pg_dump이 사용됩니다.스포츠 토토 베트맨 프로그램 만들기명령이 덤프에 포함되고 그 뒤에는그랜트그리고취소객체에 대한 권한을 덤프가 수행된 당시의 권한으로 설정하는 데 필요한 명령문.
포스트그레SQL현재 스포츠 토토 베트맨 스크립트 발행을 지원하지 않습니다.정책 생성또는보안 라벨문장. 이는 스포츠 토토 베트맨이 생성된 후에 설정될 것으로 예상됩니다. 스포츠 토토 베트맨 개체의 모든 RLS 정책 및 보안 레이블은 다음에 의해 생성된 덤프에 포함됩니다.pg_dump.
스포츠 토토 베트맨 메커니즘에는 스포츠 토토 베트맨에 포함된 SQL 개체의 정의를 조정하는 수정 스크립트 패키징을 위한 조항도 있습니다. 예를 들어 스포츠 토토 베트맨 프로그램 버전 1.1이 1.0과 비교하여 하나의 함수를 추가하고 다른 함수의 본문을 변경하는 경우 스포츠 토토 베트맨 프로그램 작성자는업데이트 스크립트이렇게 하면 두 가지만 변경됩니다. 그만큼스포츠 토토 베트맨 업데이트 변경15503_15637
스포츠 토토 베트맨의 구성원이 될 수 있는 SQL 개체의 종류는 다음에 대한 설명에 표시됩니다.스포츠 토토 베트맨 프로그램 변경. 특히 데이터베이스, 역할, 테이블스페이스 등 데이터베이스 클러스터 전체에 적용되는 개체는 스포츠 토토 베트맨 멤버가 될 수 없습니다. 스포츠 토토 베트맨은 하나의 데이터베이스 내에서만 알려져 있기 때문입니다. (스포츠 토토 베트맨 스크립트가 이러한 개체를 만드는 것이 금지되지는 않지만 그렇게 하면 스포츠 토토 베트맨의 일부로 추적되지 않습니다.) 또한 테이블은 스포츠 토토 베트맨의 멤버가 될 수 있지만 인덱스와 같은 보조 개체는 스포츠 토토 베트맨의 멤버로 직접 간주되지는 않습니다. 또 다른 중요한 점은 스키마가 스포츠 토토 베트맨에 속할 수 있지만 그 반대는 가능하지 않다는 것입니다. 스포츠 토토 베트맨과 같은 스포츠 토토 베트맨은 정규화되지 않은 이름을 가지며 존재하지 않습니다.“내부”모든 스키마. 그러나 스포츠 토토 베트맨의 구성원 개체는 해당 개체 유형에 적합할 때마다 스키마에 속합니다. 스포츠 토토 베트맨 프로그램이 해당 구성원 개체가 포함된 스키마를 소유하는 것은 적절할 수도 있고 적합하지 않을 수도 있습니다.
스포츠 토토 베트맨 프로그램의 스크립트가 임시 개체(예: 임시 테이블)를 생성하는 경우 해당 개체는 현재 세션의 나머지 부분에 대한 스포츠 토토 베트맨 멤버로 처리되지만 임시 개체와 마찬가지로 세션 종료 시 자동으로 삭제됩니다. 이는 전체 스포츠 토토 베트맨을 삭제하지 않고는 스포츠 토토 베트맨 구성원 개체를 삭제할 수 없다는 규칙의 예외입니다.
그스포츠 토토 베트맨 프로그램 생성명령은 각 스포츠 토토 베트맨자에 대한 제어 파일에 의존하며, 접미사가 붙은 스포츠 토토 베트맨자와 동일하게 이름을 지정해야 합니다..control, 설치 위치에 배치되어야 합니다.SHAREDIR/스포츠 토토 베트맨자디렉토리. 또한 하나 이상 있어야 합니다.SQL이름 지정 패턴을 따르는 스크립트 파일(예:스포츠 토토 베트맨--버전.sqlfoo--1.0.sql버전용1.0스포츠 토토 베트맨자foo). 기본적으로 스크립트 파일은SHAREDIR/스포츠 토토 베트맨자디렉토리; 그러나 제어 파일은 스크립트 파일에 대해 다른 디렉터리를 지정할 수 있습니다.
스포츠 토토 베트맨 제어 파일의 파일 형식은 스포츠 토토 베트맨 제어 파일과 동일합니다.postgresql.conf파일, 즉의 목록매개변수_이름 = 값할당, 한 줄에 하나씩. 에 의해 소개된 빈 줄과 주석#허용됩니다. 단일 단어나 숫자가 아닌 값은 반드시 인용하세요.
제어 파일은 다음 매개변수를 설정할 수 있습니다:
디렉토리 (문자열)스포츠 토토 베트맨 프로그램이 포함된 디렉토리SQL스크립트 파일. 절대 경로가 제공되지 않는 한 이름은 설치 경로를 기준으로 합니다.공유디르디렉토리. 기본 동작은 다음을 지정하는 것과 동일합니다.디렉토리 = '스포츠 토토 베트맨'.
기본_버전 (문자열)스포츠 토토 베트맨 프로그램의 기본 버전(버전이 지정되지 않은 경우 설치될 버전)스포츠 토토 베트맨 프로그램 만들기). 생략할 수 있지만 결과는 다음과 같습니다.스포츠 토토 베트맨 프로그램 만들기아니면 실패버전옵션이 나타나므로 일반적으로 그렇게 하고 싶지 않습니다.
댓글 (문자열)스포츠 토토 베트맨 프로그램에 대한 설명(문자열)입니다. 이 설명은 스포츠 토토 베트맨을 처음 생성할 때 적용되지만 스포츠 토토 베트맨 업데이트 중에는 적용되지 않습니다(사용자가 추가한 설명을 재정의할 수 있으므로). 또는 스포츠 토토 베트맨의 주석은 다음을 작성하여 설정할 수 있습니다.댓글스크립트 파일의 명령.
인코딩 (문자열)스크립트 파일에 사용되는 문자 세트 인코딩. 스크립트 파일에 ASCII가 아닌 문자가 포함된 경우 이를 지정해야 합니다. 그렇지 않으면 파일이 데이터베이스 인코딩에 있는 것으로 간주됩니다.
모듈_경로이름 (문자열)이 매개변수의 값은 다음이 발생할 때마다 대체됩니다.MODULE_PATHNAME스크립트 파일에 있습니다. 설정되지 않은 경우 대체가 이루어지지 않습니다. 일반적으로 이는 다음과 같이 설정됩니다.$libdir/그리고 나서shared_library_nameMODULE_PATHNAME다음에서 사용됨함수 생성C 언어 함수에 대한 명령이므로 스크립트 파일에 공유 라이브러리의 이름을 직접 연결할 필요가 없습니다.
필요함 (문자열)이 스포츠 토토 베트맨이 의존하는 스포츠 토토 베트맨 이름 목록, 예를 들어requires = 'foo, bar'. 이 스포츠 토토 베트맨 프로그램을 설치하려면 먼저 해당 스포츠 토토 베트맨 프로그램을 설치해야 합니다.
수퍼유저 (부울)이 매개변수가 다음과 같은 경우참(기본값), 슈퍼유저만 스포츠 토토 베트맨 프로그램을 생성하거나 새 버전으로 업데이트할 수 있습니다. 으로 설정된 경우거짓, 설치 또는 업데이트 스크립트에서 명령어를 실행하는데 필요한 권한만 필요합니다.
재배치 가능 (부울)스포츠 토토 베트맨자는재배치 가능스포츠 토토 베트맨을 처음 생성한 후 포함된 개체를 다른 스키마로 이동할 수 있는 경우. 기본값은거짓, 즉 스포츠 토토 베트맨 프로그램을 재배치할 수 없습니다. 보다섹션 37.15.2더 많은 정보를 원하시면.
스키마 (문자열)이 매개변수는 재배치 불가능한 스포츠 토토 베트맨에 대해서만 설정될 수 있습니다. 스포츠 토토 베트맨이 다른 스키마가 아닌 명명된 스키마에 정확히 로드되도록 강제합니다. 그만큼스키마매개변수는 스포츠 토토 베트맨 업데이트 중에는 참조되지 않고 처음 스포츠 토토 베트맨을 생성할 때만 참조됩니다. 보다섹션 37.15.2더 많은 정보를 원하시면.
주 제어 파일에 추가로, 스포츠 토토 베트맨에는 스타일로 명명된 보조 제어 파일이 있을 수 있습니다.스포츠 토토 베트맨.control. 제공된 경우 스크립트 파일 디렉터리에 있어야 합니다. 보조 제어 파일은 기본 제어 파일과 동일한 형식을 따릅니다. 보조 제어 파일에 설정된 모든 매개변수는 해당 버전의 스포츠 토토 베트맨을 설치하거나 업데이트할 때 기본 제어 파일을 재정의합니다. 그러나 매개변수스포츠 토토 베트맨--버전.control디렉토리그리고default_version보조 제어 파일에는 설정할 수 없습니다.
스포츠 토토 베트맨 프로그램의SQL스크립트 파일에는 트랜잭션 제어 명령을 제외한 모든 SQL 명령이 포함될 수 있습니다(시작, 커밋등) 및 트랜잭션 블록 내에서 실행할 수 없는 명령(예:진공). 이는 스크립트 파일이 트랜잭션 블록 내에서 암시적으로 실행되기 때문입니다.
스포츠 토토 베트맨 프로그램의SQL스크립트 파일에는 다음으로 시작하는 줄도 포함될 수 있습니다.\에코, 스포츠 토토 베트맨 메커니즘에 의해 무시됩니다(주석으로 처리). 이 조항은 일반적으로 스크립트 파일이 제공되는 경우 오류를 발생시키는 데 사용됩니다.psql다음을 통해 로드되는 대신스포츠 토토 베트맨 프로그램 만들기(다음의 예제 스크립트 참조섹션 37.15.7). 그렇지 않으면 사용자가 실수로 스포츠 토토 베트맨 프로그램의 콘텐츠를 다음과 같이 로드할 수 있습니다.“느슨한”스포츠 토토 베트맨보다는 객체를 사용하므로 복구하기가 다소 지루한 상태입니다.
스크립트 파일에는 지정된 인코딩이 허용하는 모든 문자가 포함될 수 있지만 제어 파일에는 일반 ASCII만 포함되어야 합니다. 왜냐하면 그럴 수 있는 방법이 없기 때문입니다.PostgreSQL제어 파일의 인코딩이 무엇인지 알기 위해. 실제로 이는 스포츠 토토 베트맨 기능의 주석에 ASCII가 아닌 문자를 사용하려는 경우에만 문제가 됩니다. 이 경우 권장되는 방법은 제어 파일을 사용하지 않는 것입니다.댓글매개변수 대신에 사용스포츠 토토 베트맨에 대한 의견스크립트 파일 내에서 주석을 설정합니다.
사용자는 종종 스포츠 토토 베트맨 프로그램 작성자가 염두에 두었던 것과 다른 스키마에 스포츠 토토 베트맨 프로그램에 포함된 개체를 로드하려고 합니다. 재배치 가능성에는 세 가지 수준이 지원됩니다.
완전히 재배치 가능한 스포츠 토토 베트맨은 데이터베이스에 로드된 후에도 언제든지 다른 스키마로 이동할 수 있습니다. 이는 다음과 같이 수행됩니다.스포츠 토토 베트맨 설정 스키마 변경명령은 모든 구성원 개체의 이름을 새 스키마로 자동으로 바꿉니다. 일반적으로 이는 스포츠 토토 베트맨에 개체가 어떤 스키마에 있는지에 대한 내부 가정이 없는 경우에만 가능합니다. 또한 스포츠 토토 베트맨의 개체는 처음부터 모두 하나의 스키마에 있어야 합니다(절차적 언어와 같이 스키마에 속하지 않는 개체는 무시). 설정을 통해 완전히 재배치 가능한 스포츠 토토 베트맨 프로그램을 표시하세요.재배치 가능 = true제어 파일에 있습니다.
스포츠 토토 베트맨 프로그램은 설치 중에 재배치가 가능하지만 설치 후에는 불가능합니다. 이는 일반적으로 스포츠 토토 베트맨의 스크립트 파일이 대상 스키마를 명시적으로 참조해야 하는 경우입니다(예: 설정에서).검색_경로SQL 함수의 속성. 이러한 스포츠 토토 베트맨의 경우 다음을 설정하세요.재배치 가능 = false제어 파일에서 사용하고@extschema@스크립트 파일의 대상 스키마를 참조합니다. 이 문자열의 모든 항목은 스크립트가 실행되기 전에 실제 대상 스키마의 이름으로 대체됩니다. 사용자는를 사용하여 대상 스키마를 설정할 수 있습니다.스키마옵션스포츠 토토 베트맨 프로그램 생성.
스포츠 토토 베트맨 프로그램이 재배치를 전혀 지원하지 않는 경우 설정재배치 가능 = false제어 파일에 있고 또한 설정스키마의도된 대상 스키마의 이름입니다. 이렇게 하면의 사용이 방지됩니다.스키마옵션스포츠 토토 베트맨 프로그램 생성, 제어 파일에 명명된 동일한 스키마를 지정하지 않는 한. 이 선택은 일반적으로 스포츠 토토 베트맨에 다음을 사용하여 대체할 수 없는 스키마 이름에 대한 내부 가정이 포함된 경우 필요합니다.@extschema@. 그만큼@extschema@이 경우에도 대체 메커니즘을 사용할 수 있지만 스키마 이름은 제어 파일에 의해 결정되므로 사용이 제한되어 있습니다.
모든 경우에 스크립트 파일은 다음과 같이 실행됩니다.검색_경로처음에는 대상 스키마를 가리키도록 설정되었습니다. 즉,스포츠 토토 베트맨 프로그램 만들기이것은 다음과 같습니다:
로컬 검색 경로를 @extschema@, pg_temp로 설정;
이것은 스크립트 파일에 의해 생성된 개체가 대상 스키마로 들어갈 수 있도록 허용합니다. 스크립트 파일은 변경될 수 있습니다.검색_경로원한다면, 그러나 일반적으로 바람직하지 않습니다.검색_경로완료되면 이전 설정으로 복원됩니다.스포츠 토토 베트맨 프로그램 생성.
대상 스키마는 다음에 의해 결정됩니다.스키마매개변수가 제공되면 제어 파일에, 그렇지 않으면스키마옵션스포츠 토토 베트맨 프로그램 생성그것이 주어지면, 그렇지 않으면 현재 기본 객체 생성 스키마(호출자의 첫 번째 것검색_경로). 제어 파일이 있을 때스키마매개변수가 사용되면 대상 스키마가 아직 존재하지 않으면 생성되지만 다른 두 경우에는 이미 존재해야 합니다.
필요한 스포츠 토토 베트맨 기능이 다음에 나열되어 있는 경우요구제어 파일에서 대상 스키마가 초기 설정에 추가됩니다.검색_경로, 새 스포츠 토토 베트맨의 대상 스키마를 따릅니다. 이를 통해 해당 개체가 새 스포츠 토토 베트맨 프로그램의 스크립트 파일에 표시될 수 있습니다.
보안을 위해pg_temp다음의 끝에 자동으로 추가됩니다.검색_경로모든 경우에.
재배치 불가능한 스포츠 토토 베트맨에는 여러 스키마에 분산된 개체가 포함될 수 있지만 일반적으로 외부 사용을 위한 모든 개체를 스포츠 토토 베트맨의 대상 스키마로 간주되는 단일 스키마에 배치하는 것이 바람직합니다. 이러한 배열은 기본 설정인와 함께 편리하게 작동합니다.검색_경로종속 스포츠 토토 베트맨 생성 중.
일부 스포츠 토토 베트맨에는 스포츠 토토 베트맨 설치 후 사용자가 추가하거나 변경할 수 있는 데이터가 포함된 구성 테이블이 포함되어 있습니다. 일반적으로 테이블이 스포츠 토토 베트맨의 일부인 경우 테이블 정의나 해당 내용이 덤프되지 않습니다.pg_dump. 그러나 이러한 동작은 구성 테이블에 바람직하지 않습니다. 사용자가 변경한 모든 데이터는 덤프에 포함되어야 합니다. 그렇지 않으면 덤프 및 다시 로드 후에 스포츠 토토 베트맨 프로그램이 다르게 동작합니다.
이 문제를 해결하기 위해 스포츠 토토 베트맨 프로그램의 스크립트 파일은 구성 관계로 생성된 테이블이나 시퀀스를 표시할 수 있으며 이로 인해 발생하는 문제는 다음과 같습니다.pg_dump테이블 또는 시퀀스의 내용(정의 아님)을 덤프에 포함합니다. 그렇게 하려면 함수를 호출하세요.pg_extension_config_dump(regclass, 텍스트)예를 들어 테이블이나 시퀀스를 생성한 후
CREATE TABLE my_config(키 텍스트, 값 텍스트);
시퀀스 생성 my_config_seq;
SELECT pg_catalog.pg_extension_config_dump('my_config', '');
SELECT pg_catalog.pg_extension_config_dump('my_config_seq', '');
이 방법으로 테이블이나 시퀀스를 얼마든지 표시할 수 있습니다. 다음과 관련된 시퀀스연재또는큰 직렬열도 표시될 수 있습니다.
두 번째 인수가pg_extension_config_dump은 빈 문자열이며, 테이블의 전체 내용은 다음에 의해 덤프됩니다.pg_dump. 이는 일반적으로 스포츠 토토 베트맨 스크립트에 의해 생성된 테이블이 처음에 비어 있는 경우에만 정확합니다. 테이블에 초기 데이터와 사용자 제공 데이터가 혼합되어 있는 경우,의 두 번째 인수pg_extension_config_dump제공어디에서32841_32915
CREATE TABLE my_config(키 텍스트, 값 텍스트, 표준 항목 부울);
SELECT pg_catalog.pg_extension_config_dump('my_config', 'standard_entry가 아닌 곳');
그런 다음 다음을 확인하세요standard_entry스포츠 토토 베트맨 프로그램의 스크립트에 의해 생성된 행에서만 true입니다.
시퀀스의 경우 두 번째 인수pg_extension_config_dump효과가 없습니다.
사용자가 수정할 수 있는 초기 제공 행과 같은 더 복잡한 상황은 수정된 행이 올바르게 표시되도록 구성 테이블에 트리거를 생성하여 처리할 수 있습니다.
호출을 통해 구성 테이블과 관련된 필터 조건을 변경할 수 있습니다.pg_extension_config_dump다시. (이것은 일반적으로 스포츠 토토 베트맨 업데이트 스크립트에서 유용합니다.) 테이블을 더 이상 구성 테이블이 아닌 것으로 표시하는 유일한 방법은 다음을 사용하여 스포츠 토토 베트맨에서 테이블을 분리하는 것입니다.스포츠 토토 베트맨 변경 ...드롭 테이블.
이 테이블 사이의 외래 키 관계는 pg_dump에 의해 테이블이 덤프되는 순서를 결정합니다. 특히 pg_dump는 참조 테이블보다 먼저 참조 테이블을 덤프하려고 시도합니다. 외래 키 관계는 CREATE EXTENSION 시간(데이터가 테이블에 로드되기 전)에 설정되므로 순환 종속성은 지원되지 않습니다. 순환 종속성이 존재하는 경우 데이터는 계속 덤프되지만 덤프를 직접 복원할 수 없으므로 사용자 개입이 필요합니다.
다음과 연관된 시퀀스연재또는큰 직렬열의 상태를 덤프하려면 열을 직접 표시해야 합니다. 부모 관계를 표시하는 것만으로는 이 목적에 충분하지 않습니다.
스포츠 토토 베트맨 메커니즘의 한 가지 장점은 스포츠 토토 베트맨의 개체를 정의하는 SQL 명령에 대한 업데이트를 관리하는 편리한 방법을 제공한다는 것입니다. 이는 버전 이름이나 번호를 스포츠 토토 베트맨 설치 스크립트의 출시된 각 버전과 연결하여 수행됩니다. 또한 사용자가 데이터베이스를 한 버전에서 다음 버전으로 동적으로 업데이트할 수 있도록 하려면 다음을 제공해야 합니다.업데이트 스크립트한 버전에서 다음 버전으로 이동하는 데 필요한 변경을 수행합니다. 업데이트 스크립트에는 패턴을 따르는 이름이 있습니다.(예를 들어,스포츠 토토 베트맨--old_version--target_version.sqlfoo--1.0--1.1.sql버전 수정 명령이 포함되어 있습니다1.0스포츠 토토 베트맨foo버전으로1.1).
적절한 업데이트 스크립트를 사용할 수 있으면 다음 명령스포츠 토토 베트맨 업데이트 변경설치된 스포츠 토토 베트맨 기능을 지정된 새 버전으로 업데이트합니다. 업데이트 스크립트는 다음과 동일한 환경에서 실행됩니다.스포츠 토토 베트맨 프로그램 생성설치 스크립트 제공: 특히,검색_경로도 같은 방식으로 설정되며 스크립트에 의해 생성된 모든 새 개체가 자동으로 스포츠 토토 베트맨 프로그램에 추가됩니다. 또한 스크립트가 스포츠 토토 베트맨 구성원 개체를 삭제하도록 선택하면 자동으로 스포츠 토토 베트맨 프로그램에서 연결이 해제됩니다.
스포츠 토토 베트맨에 보조 제어 파일이 있는 경우 업데이트 스크립트에 사용되는 제어 매개변수는 스크립트의 대상(새) 버전과 관련된 매개변수입니다.
업데이트 메커니즘은 중요한 특수 사례를 해결하는 데 사용될 수 있습니다: a“느슨한”개체를 스포츠 토토 베트맨으로 수집합니다. 스포츠 토토 베트맨 메커니즘이 추가되기 전PostgreSQL(9.1에서) 많은 사람들이 단순히 여러 가지 포장되지 않은 개체를 생성하는 스포츠 토토 베트맨 모듈을 작성했습니다. 이러한 개체가 포함된 기존 데이터베이스가 있는 경우 해당 개체를 적절하게 패키지된 스포츠 토토 베트맨으로 어떻게 변환할 수 있습니까? 그것들을 떨어뜨린 다음 일반 작업을 수행합니다.스포츠 토토 베트맨 프로그램 만들기는 일방향이지만 개체에 종속성이 있는 경우에는 바람직하지 않습니다(예: 스포츠 토토 베트맨 프로그램에서 생성된 데이터 유형의 테이블 열이 있는 경우). 이 상황을 해결하는 방법은 빈 스포츠 토토 베트맨을 만든 다음 다음을 사용하는 것입니다.스포츠 토토 베트맨 프로그램 변경 추가기존의 각 개체를 스포츠 토토 베트맨에 연결한 다음 마지막으로 현재 스포츠 토토 베트맨 버전에는 있지만 패키지 해제된 릴리스에는 없었던 새 개체를 생성합니다.스포츠 토토 베트맨 프로그램 생성이 사례를 뒷받침합니다발신 이전_버전옵션, 대상 버전에 대한 일반 설치 스크립트를 실행하지 않고 대신 이름이 지정된 업데이트 스크립트를 실행하게 함. 사용할 더미 버전 이름 선택스포츠 토토 베트맨--이전_버전--대상_버전.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(경로,'--')배열 형식을 선호하는 경우.
한동안 사용된 스포츠 토토 베트맨 기능은 아마도 여러 버전에 존재할 것이며, 이에 대한 작성자는 업데이트 스크립트를 작성해야 합니다. 예를 들어,foo버전의 스포츠 토토 베트맨명1.0, 1.1및1.2, 업데이트 스크립트가 있어야 합니다foo--1.0--1.1.sql그리고foo--1.1--1.2.sql. 전에포스트그레SQL10, 새로운 스크립트 파일도 생성해야 했습니다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이 세 스크립트를 순서대로 실행하면 영광입니다. 처리는 처음 설치한 것과 동일합니다.1.0다음으로 업데이트됨1.2. (와 마찬가지로스포츠 토토 베트맨 업데이트 변경, 여러 경로를 사용할 수 있는 경우 가장 짧은 경로가 선호됩니다.) 스포츠 토토 베트맨 프로그램의 스크립트 파일을 이 스타일로 정렬하면 작은 업데이트를 생성하는 데 필요한 유지 관리 노력을 줄일 수 있습니다.
이 스타일로 유지되는 스포츠 토토 베트맨자를 가진 보조(버전별) 제어 파일을 사용하는 경우 각 버전에 독립 실행형 설치 스크립트가 없더라도 제어 파일이 필요하다는 점을 명심하십시오. 해당 제어 파일이 해당 버전에 대한 암시적 업데이트 수행 방법을 결정하기 때문입니다. 예를 들어, 만약foo--1.0.control지정요구 = '바'하지만foo의 다른 제어 파일은 그렇지 않습니다. 스포츠 토토 베트맨 프로그램의 종속성은바다음에서 업데이트할 때 삭제됩니다1.0다른 버전으로.
널리 배포된 스포츠 토토 베트맨 프로그램은 자신이 차지하는 데이터베이스에 대해 거의 가정하지 않아야 합니다. 따라서 검색 경로 기반 공격으로 인해 손상될 수 없는 안전한 스타일로 스포츠 토토 베트맨 프로그램에서 제공하는 함수를 작성하는 것이 적절합니다.
다음을 가진 스포츠 토토 베트맨 프로그램수퍼유저true로 설정된 속성은 설치 및 업데이트 스크립트 내에서 수행되는 작업에 대한 보안 위험도 고려해야 합니다. 악의적인 사용자가 부주의하게 작성된 스포츠 토토 베트맨 스크립트의 나중에 실행을 손상시켜 해당 사용자가 슈퍼유저 권한을 획득할 수 있도록 하는 트로이 목마 개체를 만드는 것은 그리 어렵지 않습니다.
함수를 안전하게 작성하는 방법에 대한 조언은 다음에서 제공됩니다.섹션 37.15.6.1아래, 설치 스크립트를 안전하게 작성하는 방법에 대한 조언은 다음에서 제공됩니다.섹션 37.15.6.2.
스포츠 토토 베트맨에서 제공하는 SQL 언어 및 PL 언어 함수는 실행 시 검색 경로 기반 공격의 위험이 있습니다. 이러한 함수의 구문 분석은 생성 시간이 아닌 실행 시간에 발생하기 때문입니다.
그함수 생성참조 페이지에는 글쓰기에 대한 조언이 포함되어 있습니다.보안 정의자안전하게 작동합니다. 높은 권한을 가진 사용자가 함수를 호출할 수 있으므로 스포츠 토토 베트맨 프로그램에서 제공하는 모든 함수에 이러한 기술을 적용하는 것이 좋습니다.
설정할 수 없는 경우검색_경로보안 스키마만 포함하려면 정규화되지 않은 각 이름이 악의적인 사용자가 정의한 개체로 해석될 수 있다고 가정합니다. 다음에 의존하는 구성에 주의하세요.검색_경로암시적으로; 예를 들어,IN그리고사례항상 검색 경로를 사용하여 연산자를 선택하세요. 대신에표현언제연산자(그리고스키마.=) 모두경우의 경우.표현
범용 스포츠 토토 베트맨은 일반적으로 보안 스키마에 설치되었다고 가정해서는 안 됩니다. 즉, 자체 개체에 대한 스키마 한정 참조도 완전히 위험이 없는 것은 아닙니다. 예를 들어 스포츠 토토 베트맨 프로그램이 함수를 정의한 경우myschema.myfunc(bigint)다음과 같은 호출myschema.myfunc(42)적대적인 기능에 의해 캡처될 수 있습니다myschema.myfunc(정수). 필요한 경우 명시적 캐스트를 사용하여 함수 및 연산자 매개변수의 데이터 유형이 선언된 인수 유형과 정확히 일치하는지 주의하세요.
스크립트가 실행될 때 발생하는 검색 경로 기반 공격으로부터 보호하기 위해 스포츠 토토 베트맨 설치 또는 업데이트 스크립트를 작성해야 합니다. 스크립트 작성자가 의도한 것과 다른 개체를 확인하기 위해 스크립트의 개체 참조를 만들 수 있는 경우 손상이 즉시 발생할 수 있으며 나중에 잘못 정의된 스포츠 토토 베트맨 개체가 사용될 때 발생할 수 있습니다.
다음과 같은 DDL 명령함수 생성그리고연산자 클래스 생성은 일반적으로 안전하지만 범용 표현식을 구성 요소로 포함하는 명령에 주의하세요. 예를 들어,보기 만들기a와 마찬가지로 조사가 필요합니다.기본값표현식함수 생성.
때때로 스포츠 토토 베트맨 스크립트는 범용 SQL을 실행해야 할 수도 있습니다(예: DDL을 통해 불가능한 카탈로그 조정을 수행하기 위해). 보안을 사용하여 이러한 명령을 실행하도록 주의하세요.검색_경로; 하다아님제공된 경로를 신뢰스포츠 토토 베트맨 프로그램 생성/변경안전합니다. 모범 사례는 임시로 설정하는 것입니다.검색_경로에'pg_catalog, pg_temp'그리고 필요한 곳에 스포츠 토토 베트맨 설치 스키마에 대한 참조를 명시적으로 삽입합니다. (이 방법은 뷰 생성에도 도움이 될 수 있습니다.) 예는 다음에서 찾을 수 있습니다.기여모듈PostgreSQL소스 코드 배포.
교차 스포츠 토토 베트맨 참조는 부분적으로 다른 스포츠 토토 베트맨이 어떤 스키마에 있는지에 대한 불확실성 때문에 완전히 보안을 유지하기가 매우 어렵습니다. 두 스포츠 토토 베트맨이 동일한 스키마에 설치되면 설치 시간에 적대적인 개체가 참조 스포츠 토토 베트맨보다 앞에 배치될 수 없기 때문에 위험이 줄어듭니다.검색_경로. 그러나 현재 이를 요구하는 메커니즘은 없습니다.
여기에 완전한 예가 있습니다.SQL-전용 스포츠 토토 베트맨, 이름이 지정된 슬롯에 모든 유형의 값을 저장할 수 있는 2요소 복합 유형“k”그리고“v”. 텍스트가 아닌 값은 저장을 위해 자동으로 텍스트로 강제 변환됩니다.
스크립트 파일pair--1.0.sql다음과 같습니다:
-- 스크립트가 CREATE EXTENSION을 통하지 않고 psql에서 제공되는 경우 불평합니다.
\echo 이 파일을 로드하려면 "CREATE EXTENSION 쌍"을 사용하십시오. \그만두다
CREATE TYPE 쌍 AS(k 텍스트, v 텍스트);
CREATE FUNCTION 쌍(텍스트, 텍스트)
쌍 LANGUAGE SQL을 'SELECT ROW($1, $2)::@extschema@.pair;'로 반환합니다.
CREATE OPERATOR ~ (LEFTARG = 텍스트, RIGHTARG = 텍스트, PROCEDURE = 쌍);
-- "SET search_path"는 이해하기 쉽지만 정규화된 이름은 더 나은 성능을 발휘합니다.
CREATE FUNCTION 하위(쌍)
반환 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' # @extschema@ 사용으로 인해 재배치할 수 없습니다. 재배치 가능 = false
이 두 파일을 올바른 디렉토리에 설치하기 위해 makefile이 거의 필요하지 않지만 다음을 사용할 수 있습니다.메이크파일다음 내용 포함:
스포츠 토토 베트맨 = 쌍 데이터 = 쌍--1.0.sql PG_CONFIG = pg_config PGXS := $(쉘 $(PG_CONFIG) --pgxs) $(PGXS) 포함
이 makefile은 다음에 의존합니다.PGXS, 설명된 내용은섹션 37.16. 명령설치하기다음에서 보고한 대로 올바른 디렉토리에 제어 및 스크립트 파일을 설치합니다.pg_config.
파일이 설치되면 다음을 사용하십시오.스포츠 토토 베트맨 프로그램 만들기객체를 특정 데이터베이스에 로드하는 명령입니다.