유용한 메이저 토토 사이트PostgreSQL일반적으로 여러 SQL 개체를 포함합니다. 예를 들어, 새로운 데이터 유형에는 새로운 함수, 새로운 연산자, 그리고 아마도 새로운 인덱스 연산자 클래스가 필요할 것입니다. 데이터베이스 관리를 단순화하려면 이러한 모든 객체를 단일 패키지로 수집하는 것이 도움이 됩니다.PostgreSQL그러한 패키지를 호출합니다.메이저 토토 사이트. 메이저 토토 사이트을 정의하려면 최소한 a가 필요합니다.스크립트 파일다음을 포함하는SQL메이저 토토 사이트 프로그램의 개체를 생성하는 명령 및 a제어 파일메이저 토토 사이트 프로그램 자체의 몇 가지 기본 속성을 지정합니다. 메이저 토토 사이트에 C 코드가 포함된 경우 일반적으로 C 코드가 빌드된 공유 라이브러리 파일도 있습니다. 이러한 파일이 있으면 간단한메이저 토토 사이트 프로그램 생성명령은 개체를 데이터베이스에 로드합니다.
단순히 실행하는 것보다 메이저 토토 사이트 프로그램을 사용하는 것의 주요 이점SQL다발을 로드하는 스크립트“느슨한”개체를 데이터베이스에 추가하는 것입니다.포스트그레SQL그러면 메이저 토토 사이트의 개체가 함께 작동한다는 것을 이해할 것입니다. 단일로 모든 객체를 삭제할 수 있습니다.삭제 메이저 토토 사이트명령(별도 유지관리 필요 없음“제거”스크립트). 더욱 유용합니다.pg_dump메이저 토토 사이트 프로그램의 개별 구성원 개체를 덤프해서는 안 된다는 것을 알고 있습니다. 단지 다음을 포함할 것입니다.메이저 토토 사이트 프로그램 만들기12331_12631
PostgreSQL전체 메이저 토토 사이트을 삭제하는 경우를 제외하고는 메이저 토토 사이트에 포함된 개별 개체를 삭제할 수 없습니다. 또한 메이저 토토 사이트 멤버 객체의 정의를 변경할 수도 있지만(예: via함수 생성 또는 교체함수), 수정된 정의는 다음에 의해 덤프되지 않는다는 점을 명심하세요.pg_dump. 이러한 변경은 일반적으로 메이저 토토 사이트 프로그램의 스크립트 파일에서 동일한 변경을 동시에 수행하는 경우에만 의미가 있습니다. (그러나 구성 데이터가 포함된 테이블에 대한 특별한 조항이 있습니다. 참조섹션 38.17.3.) 프로덕션 상황에서는 일반적으로 메이저 토토 사이트 업데이트 스크립트를 생성하여 메이저 토토 사이트 구성원 개체를 변경하는 것이 좋습니다.
메이저 토토 사이트 스크립트는 다음을 사용하여 메이저 토토 사이트의 일부인 개체에 대한 권한을 설정할 수 있습니다.그랜트그리고취소문장. 각 객체에 대한 최종 권한 세트(설정된 경우)는pg_init_privs시스템 카탈로그. 언제pg_dump이 사용됩니다.메이저 토토 사이트 프로그램 만들기명령이 덤프에 포함되고 그 뒤에는그랜트그리고취소객체에 대한 권한을 덤프가 수행된 당시의 권한으로 설정하는 데 필요한 명령문.
PostgreSQL현재 메이저 토토 사이트 스크립트 발행을 지원하지 않습니다.정책 생성또는보안 라벨문장. 이는 메이저 토토 사이트이 생성된 후에 설정될 것으로 예상됩니다. 메이저 토토 사이트 개체의 모든 RLS 정책 및 보안 레이블은 다음에 의해 생성된 덤프에 포함됩니다.pg_dump.
메이저 토토 사이트 메커니즘에는 메이저 토토 사이트에 포함된 SQL 개체의 정의를 조정하는 수정 스크립트 패키징을 위한 조항도 있습니다. 예를 들어 메이저 토토 사이트 프로그램 버전 1.1이 1.0과 비교하여 하나의 함수를 추가하고 다른 함수의 본문을 변경하는 경우 메이저 토토 사이트 프로그램 작성자는업데이트 스크립트이렇게 하면 두 가지만 변경됩니다.메이저 토토 사이트 업데이트 변경15173_15307
메이저 토토 사이트 프로그램의 구성원이 될 수 있는 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'. 이 메이저 토토 사이트 프로그램을 설치하려면 먼저 해당 메이저 토토 사이트 프로그램을 설치해야 합니다.
수퍼유저 (부울)이 매개변수가 다음과 같은 경우참(기본값), 수퍼유저만 메이저 토토 사이트 프로그램을 생성하거나 새 버전으로 업데이트할 수 있습니다(또한 참조신뢰할 수 있는, 아래). 으로 설정된 경우거짓, 설치 또는 업데이트 스크립트에서 명령을 실행하는 데 필요한 권한만 필요합니다. 일반적으로 다음과 같이 설정되어야 합니다.참스크립트 명령 중 슈퍼유저 권한이 필요한 경우. (이러한 명령은 어쨌든 실패하지만 오류를 미리 알려주는 것이 사용자에게 더 친숙합니다.)
신뢰할 수 있는 (부울)이 매개변수는 다음과 같이 설정된 경우참(기본값은 아님) 수퍼유저가 아닌 일부 사용자가 다음과 같은 메이저 토토 사이트 기능을 설치할 수 있도록 허용합니다.수퍼유저다음으로 설정됨참. 특히 다음과 같은 사용자에게는 설치가 허용됩니다.만들기현재 데이터베이스에 대한 권한입니다. 사용자가 실행하는 경우메이저 토토 사이트 프로그램 생성은(는) 수퍼유저가 아니지만 이 매개변수 덕분에 설치가 허용된 경우 설치 또는 업데이트 스크립트는 호출 사용자가 아닌 부트스트랩 수퍼유저로 실행됩니다. 이 매개변수는 다음과 같은 경우에는 관련이 없습니다.수퍼유저이다거짓. 일반적으로 파일 시스템 액세스와 같이 슈퍼유저 전용 기능에 대한 액세스를 허용할 수 있는 메이저 토토 사이트의 경우 true로 설정하면 안 됩니다. 또한 메이저 토토 사이트 프로그램을 신뢰할 수 있음으로 표시하려면 메이저 토토 사이트 프로그램의 설치 및 업데이트 스크립트를 안전하게 작성하기 위해 상당한 추가 노력이 필요합니다. 참조섹션 38.17.6.
재배치 가능 (부울)메이저 토토 사이트자는재배치 가능메이저 토토 사이트을 처음 생성한 후 포함된 개체를 다른 스키마로 이동할 수 있는 경우. 기본값은거짓, 즉 메이저 토토 사이트 프로그램을 재배치할 수 없습니다. 참조섹션 38.17.2더 많은 정보를 원하시면.
스키마 (문자열)이 매개변수는 재배치 불가능한 메이저 토토 사이트에 대해서만 설정될 수 있습니다. 메이저 토토 사이트이 다른 스키마가 아닌 명명된 스키마에 정확히 로드되도록 강제합니다.스키마매개변수는 메이저 토토 사이트 업데이트 중에는 참조되지 않고 처음 메이저 토토 사이트을 생성할 때만 참조됩니다. 참조섹션 38.17.2자세한 정보는.
주 제어 파일에 추가로, 메이저 토토 사이트에는 스타일 이름으로 명명된 보조 제어 파일이 있을 수 있습니다.메이저 토토 사이트.control. 제공된 경우 스크립트 파일 디렉터리에 있어야 합니다. 보조 제어 파일은 기본 제어 파일과 동일한 형식을 따릅니다. 보조 제어 파일에 설정된 모든 매개변수는 해당 버전의 메이저 토토 사이트을 설치하거나 업데이트할 때 기본 제어 파일을 재정의합니다. 그러나 매개변수메이저 토토 사이트--버전.control디렉토리그리고기본_버전보조 제어 파일에는 설정할 수 없습니다.
메이저 토토 사이트 프로그램SQL스크립트 파일에는 트랜잭션 제어 명령을 제외한 모든 SQL 명령이 포함될 수 있습니다(시작, 커밋등) 및 트랜잭션 블록 내에서 실행할 수 없는 명령(예:진공). 이는 스크립트 파일이 트랜잭션 블록 내에서 암시적으로 실행되기 때문입니다.
메이저 토토 사이트 프로그램SQL스크립트 파일에는 다음으로 시작하는 줄도 포함될 수 있습니다.\에코, 메이저 토토 사이트 메커니즘에 의해 무시됩니다(주석으로 처리). 이 조항은 일반적으로 스크립트 파일이 제공되는 경우 오류를 발생시키는 데 사용됩니다.psql다음을 통해 로드되는 대신메이저 토토 사이트 프로그램 생성(다음의 예제 스크립트 참조섹션 38.17.7). 그렇지 않으면 사용자가 실수로 메이저 토토 사이트 프로그램의 콘텐츠를 다음과 같이 로드할 수 있습니다.“느슨한”메이저 토토 사이트보다는 객체를 사용하므로 복구하기가 다소 지루한 상태입니다.
메이저 토토 사이트 스크립트에 문자열이 포함된 경우@extowner@, 해당 문자열은 호출하는 사용자의 (적절하게 인용된) 이름으로 대체됩니다.메이저 토토 사이트 프로그램 만들기또는메이저 토토 사이트 프로그램 변경. 일반적으로 이 기능은 선택한 개체의 소유권을 부트스트랩 수퍼유저가 아닌 호출 사용자에게 할당하기 위해 신뢰할 수 있다고 표시된 메이저 토토 사이트에서 사용됩니다. (그러나 그렇게 할 때는 주의해야 합니다. 예를 들어, 슈퍼유저가 아닌 사람에게 C 언어 기능의 소유권을 할당하면 해당 사용자에 대한 권한 에스컬레이션 경로가 생성됩니다.)
스크립트 파일에는 지정된 인코딩이 허용하는 모든 문자가 포함될 수 있지만 제어 파일에는 일반 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제공어디에서35296_35370
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 명령에 대한 업데이트를 관리하는 편리한 방법을 제공한다는 것입니다. 이는 버전 이름이나 번호를 메이저 토토 사이트 설치 스크립트의 릴리스된 각 버전과 연결하여 수행됩니다. 또한 사용자가 한 버전에서 다음 버전으로 데이터베이스를 동적으로 업데이트할 수 있도록 하려면 다음을 제공해야 합니다.업데이트 스크립트한 버전에서 다음 버전으로 이동하는 데 필요한 변경을 수행합니다. 업데이트 스크립트에는 패턴을 따르는 이름이 있습니다.(예:메이저 토토 사이트--이전_버전--대상_버전.sqlfoo--1.0--1.1.sql버전 수정 명령이 포함되어 있습니다1.0메이저 토토 사이트foo버전으로1.1).
적절한 업데이트 스크립트를 사용할 수 있으면 다음 명령메이저 토토 사이트 업데이트 변경설치된 메이저 토토 사이트 기능을 지정된 새 버전으로 업데이트합니다. 업데이트 스크립트는 다음과 동일한 환경에서 실행됩니다.메이저 토토 사이트 프로그램 만들기설치 스크립트 제공: 특히,검색_경로도 같은 방식으로 설정되며 스크립트에 의해 생성된 새 개체는 자동으로 메이저 토토 사이트 프로그램에 추가됩니다. 또한 스크립트가 메이저 토토 사이트 구성원 개체를 삭제하도록 선택하면 자동으로 메이저 토토 사이트 프로그램에서 연결이 해제됩니다.
메이저 토토 사이트 프로그램에 보조 제어 파일이 있는 경우 업데이트 스크립트에 사용되는 제어 매개변수는 스크립트의 대상(새) 버전과 관련된 매개변수입니다.
메이저 토토 사이트 프로그램 변경은 요청된 업데이트를 달성하기 위해 일련의 업데이트 스크립트 파일을 실행할 수 있습니다. 예를 들어 다음과 같은 경우에만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로 설정된 속성은 설치 및 업데이트 스크립트 내에서 수행되는 작업에 대한 보안 위험도 고려해야 합니다. 악의적인 사용자가 부주의하게 작성된 메이저 토토 사이트 스크립트의 나중에 실행을 손상시켜 해당 사용자가 슈퍼유저 권한을 획득할 수 있도록 하는 트로이 목마 개체를 만드는 것은 그리 어렵지 않습니다.
메이저 토토 사이트자가 표시된 경우신뢰할 수 있는이면 설치 사용자가 해당 설치 스키마를 선택할 수 있습니다. 이 사용자는 슈퍼유저 권한을 얻기 위해 의도적으로 안전하지 않은 스키마를 사용할 수 있습니다. 따라서 신뢰할 수 있는 메이저 토토 사이트 프로그램은 보안 관점에서 극도로 노출되어 있으며 모든 스크립트 명령을 주의 깊게 검사하여 손상될 가능성이 없는지 확인해야 합니다.
함수를 안전하게 작성하는 방법에 대한 조언은 다음에서 제공됩니다.섹션 38.17.6.1아래, 설치 스크립트를 안전하게 작성하는 방법에 대한 조언은 다음에서 제공됩니다.섹션 38.17.6.2.
메이저 토토 사이트에서 제공하는 SQL 언어 및 PL 언어 함수는 실행 시 검색 경로 기반 공격의 위험이 있습니다. 이러한 함수의 구문 분석은 생성 시간이 아닌 실행 시간에 발생하기 때문입니다.
그함수 생성참조 페이지에는 글쓰기에 대한 조언이 포함되어 있습니다.보안 정의자안전하게 작동합니다. 높은 권한을 가진 사용자가 함수를 호출할 수 있으므로 메이저 토토 사이트 프로그램에서 제공하는 모든 함수에 이러한 기술을 적용하는 것이 좋습니다.
설정할 수 없는 경우검색_경로보안 스키마만 포함하려면 정규화되지 않은 각 이름이 악의적인 사용자가 정의한 개체로 해석될 수 있다고 가정합니다. 다음에 의존하는 구성에 주의하세요.검색_경로암묵적으로; 예를 들어,IN그리고사례항상 검색 경로를 사용하여 연산자를 선택하세요. 대신에표현언제연산자(그리고스키마.=) 모두경우는 다음과 같습니다.표현
범용 메이저 토토 사이트은 일반적으로 보안 스키마에 설치되었다고 가정해서는 안 됩니다. 즉, 자체 개체에 대한 스키마 한정 참조도 완전히 위험이 없는 것은 아닙니다. 예를 들어 메이저 토토 사이트 프로그램이 함수를 정의한 경우myschema.myfunc(bigint)다음과 같은 호출myschema.myfunc(42)적대적인 기능에 의해 캡처될 수 있습니다myschema.myfunc(정수). 필요한 경우 명시적 캐스트를 사용하여 함수 및 연산자 매개변수의 데이터 유형이 선언된 인수 유형과 정확히 일치하는지 주의하세요.
스크립트가 실행될 때 발생하는 검색 경로 기반 공격으로부터 보호하기 위해 메이저 토토 사이트 설치 또는 업데이트 스크립트를 작성해야 합니다. 스크립트 작성자가 의도한 것과 다른 개체를 확인하기 위해 스크립트의 개체 참조를 만들 수 있는 경우 손상은 즉시 발생할 수 있으며 나중에 잘못 정의된 메이저 토토 사이트 개체가 사용될 때 발생할 수 있습니다.
다음과 같은 DDL 명령함수 생성그리고연산자 클래스 생성은 일반적으로 안전하지만 범용 표현식을 구성요소로 포함하는 명령에 주의하세요. 예를 들어,보기 만들기a와 마찬가지로 조사가 필요합니다.기본값표현식함수 생성.
때로는 메이저 토토 사이트 스크립트가 범용 SQL을 실행해야 할 수도 있습니다(예: DDL을 통해 불가능한 카탈로그 조정을 수행하기 위해). 보안을 사용하여 이러한 명령을 실행하도록 주의하세요.검색_경로; 하다아님제공된 경로를 신뢰메이저 토토 사이트 프로그램 생성/변경안전합니다. 모범 사례는 임시로 설정하는 것입니다.검색_경로에pg_catalog, pg_temp그리고 필요한 곳에 메이저 토토 사이트 설치 스키마에 대한 참조를 명시적으로 삽입합니다. (이 방법은 뷰 생성에도 도움이 될 수 있습니다.) 예는 다음에서 찾을 수 있습니다.기여모듈포스트그레SQL소스 코드 배포.
교차 메이저 토토 사이트 참조는 부분적으로 다른 메이저 토토 사이트이 어떤 스키마에 있는지에 대한 불확실성으로 인해 완전히 보안을 유지하기가 매우 어렵습니다. 두 메이저 토토 사이트이 동일한 스키마에 설치되면 설치 시간에 적대적인 객체가 참조 메이저 토토 사이트보다 앞에 배치될 수 없기 때문에 위험이 줄어듭니다.검색_경로. 그러나 현재 이를 요구하는 메커니즘은 없습니다. 현재 가장 좋은 방법은 다른 메이저 토토 사이트 프로그램이 항상 설치되어 있지 않는 한 다른 메이저 토토 사이트 프로그램에 의존하는 경우 해당 메이저 토토 사이트 프로그램을 신뢰할 수 있다고 표시하지 않는 것입니다.pg_catalog.
여기에 완전한 예가 있습니다.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 = 텍스트, FUNCTION = 쌍);
-- "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, 설명된 내용은섹션 38.18. 명령설치하기다음에서 보고한 대로 올바른 디렉토리에 제어 및 스크립트 파일을 설치합니다.pg_config.
파일이 설치되면 다음을 사용하십시오.메이저 토토 사이트 프로그램 생성객체를 특정 데이터베이스에 로드하는 명령입니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.