수동으로 제작 된 초기 스포츠 토토가있는 각 카탈로그 (일부는 해당하지 않음).dat
편집 가능한 형식의 초기 스포츠 토토를 포함하는 파일.
각.dat
파일에는 Catalog Row 당 1 개의 해시 참조 배열로 구성된 메모리 내 스포츠 토토 구조를 생성하기 위해 단순히 평가되는 Perl 스포츠 토토 구조 리터럴이 포함되어 있습니다. 약간 수정 된 발췌문.dat
주요 기능을 보여줍니다.
[
참고 사항 :
전체 파일 레이아웃은 다음과 같습니다. 개방형 사각형 브래킷, 각각 하나 이상의 곱슬 브레이스 세트가 카탈로그 행, 닫기 사각형 브래킷을 나타냅니다. 닫는 곱슬 버팀대 후에 쉼표를 쓰십시오.
각 카탈로그 행 내에 쉼표로 구분 된 쓰기키
=>
value
쌍. 허용키
s는 카탈로그 열의 이름이며 메타 스포츠 토토 키OID
, OID_SYMBOL
, array_type_oid
및descr
. (사용OID
andOID_SYMBOL
섹션 67.2.2아래array_type_oid
섹션 67.2.4. descr
객체에 대한 설명 문자열을 제공합니다.pg_description
또는pg_shdescription
적절한 경우) 메타 스포츠 토토 키는 선택 사항이지만 카탈로그의 정의 된 열은 모두 제공되어야합니다..h
파일 열에 대한 기본값을 지정합니다. (위의 예에서datdba
필드는 생략 되었기 때문에pg_database.h
적절한 기본값을 제공합니다.)
모든 값은 단일 인용해야합니다. 백 슬래시가있는 값 내에서 사용 된 단일 따옴표를 피하십시오.섹션 4.1.2.2); 예를 들어\ t
탭 문자로 변환합니다. 실제로 최종 값의 백 슬래시를 원한다면 4 개 중 4 개를 작성해야합니다. Perl Strips, Leave\\
부트 스트랩 스캐너를 볼 수 있습니다.
NULL 값은로 표시됩니다._null_
. (그 문자열 인 값을 만들 수있는 방법이 없습니다.)
댓글이 앞서#
, 자신의 선에 있어야합니다.
다른 카탈로그 항목의 OID 인 필드 값은 실제 숫자 OID가 아닌 상징적 이름으로 표시되어야합니다. (위의 예에서dattablespace
그러한 참조를 포함합니다.) 이것은에 설명되어 있습니다.섹션 67.2.3아래.
해시는 정렬되지 않은 스포츠 토토 구조이므로 현장 순서 및 라인 레이아웃이 의미 적으로 중요하지 않습니다. 그러나 일관된 모양을 유지하기 위해 서식 스크립트에 의해 적용되는 몇 가지 규칙을 설정합니다.for
:
각 곱슬 버팀대 쌍 내에 메타 스포츠 토토 필드OID
, OID_SYMBOL
, array_type_oid
및descr
(현재) 먼저 오면 해당 순서대로 카탈로그의 자체 필드가 정의 된 순서로 나타납니다.
가능한 경우 라인 길이를 80 자로 제한하기 위해 필요한 경우 필드간에 NewLines가 삽입됩니다. 메타 스포츠 토토 필드와 일반 필드 사이에 Newline도 삽입됩니다.
카탈로그 인 경우.h
파일 열에 대한 기본값을 지정하고 스포츠 토토 입력에 동일한 값이 있습니다.for
스포츠 토토 파일에서 생략합니다. 이것은 스포츠 토토 표현을 컴팩트하게 유지합니다.
for
빈 줄을 보존하고 댓글 줄을 보존합니다.
실행하는 것이 좋습니다for
카탈로그 스포츠 토토 패치를 제출하기 전에. 편의를 위해 단순히로 변경할 수 있습니다.src/include/catalog/
and run개혁-파일 만들기
.
스포츠 토토 표현을 더 작게 만드는 새로운 방법을 추가하려면를 구현해야합니다.for
그리고 또한 가르치는카탈로그 :: parsedata ()
스포츠 토토를 전체 표현으로 다시 확장하는 방법.
초기 데이터에 나타나는 카탈로그 행에 an을 작성하여 수동으로 할당 된 OID를 제공 할 수 있습니다OID =>
메타 스포츠 토토 필드. 또한 OID가 할당되면 해당 OID에 대한 C 매크로를 작성하여 생성 할 수 있습니다.nnnn
OID_SYMBOL =>
메타 스포츠 토토 필드.이름
사전로드 된 카탈로그 행에는 사전로드 된 행에 OID 참조가있는 경우 사전 부정 된 OID가 있어야합니다. 행의 OID를 C 코드에서 참조 해야하는 경우 사전 설정된 OID도 필요합니다.OID
메타 데이터 필드를 생략 할 수 있으며,이 경우 부트 스트랩 코드는 자동으로 OID를 할당합니다. 실제로 우리는 일반적으로 주어진 카탈로그에서 사전로드 된 행 중 전부 또는 전혀없는 OID를 전혀 사전 할 수 있습니다.
C 코드에서 OID의 실제 숫자 값을 작성하는 것은 매우 나쁜 형태로 간주됩니다. 대신 항상 매크로를 사용하십시오.PG_PROC
OIDS는 필요한 매크로를 자동으로 만들기위한 특별한 메커니즘이있을 정도로 일반적입니다. 보다src/backend/utils/gen_fmgrtab.pl
. 마찬가지로 - 그러나 역사적 이유로 똑같은 방식으로 수행되지 않은 경우 - 매크로를 만들기위한 자동 방법이 있습니다pg_type
oids.OID_SYMBOL
따라서이 두 카탈로그에는 항목이 필요하지 않습니다. 마찬가지로, 매크로pg_class
시스템 카탈로그 및 인덱스의 OID가 자동으로 설정됩니다. 다른 모든 시스템 카탈로그의 경우를 통해 필요한 매크로를 수동으로 지정해야합니다.OID_SYMBOL
항목.
새 사전로드 행에 사용 가능한 OID를 찾으려면 스크립트를 실행하십시오SRC/포함/카탈로그/UNUSED_OIDS
. 사용하지 않는 OID의 포괄적 인 범위 (예 : 출력 라인을 인쇄합니다.45-900
의미는 OIDS 45 ~ 900이 아직 할당되지 않았다는 것을 의미합니다. 현재 OIDS 1-9999는 수동 할당을 위해 예약되어 있습니다.unused_oids
스크립트는 단순히 카탈로그 헤더를 통해 봅니다.dat
파일이 나타나지 않는 파일. 당신은 또한를 사용할 수 있습니다.duplical_oids
실수를 확인하는 스크립트. (genbki.pl
하나의 손으로 할당되지 않은 행에 대해 OIDS를 할당하고 컴파일 시간에 중복 OID를 감지합니다.)
즉시 커밋되지 않을 패치에 대한 OID를 선택할 때 모범 사례는 8000-9999 범위에서 임의의 선택으로 시작하여보다 연속적인 OID 그룹을 사용하는 것입니다. 이것은 다른 패치가 동시에 개발되는 OID 충돌의 위험을 최소화합니다.OID
이 목적으로 사용될 수 있습니다. 커밋되지 않은 패치가 최근에 커밋 된 패치와 OID 충돌이있는 것으로 밝혀지면OID
해당 상황에서 회복하는 데 유용 할 수도 있습니다.
패치에 의해 할당 된이 OID를 흡수 할 수있는이 협약으로 인해 패치에 의해 할당 된 OID는 패치가 공식 릴리스에 포함될 때까지 안정적으로 간주되어서는 안됩니다. 그러나 수동으로 할당 된 오브젝트 OIDS는 한 번 릴리스되지만 분류 된 호환성 문제를 일으킬 것이므로
ifgenbki.pl
18840_19222
아래의 OID가있는 개체FirstunpinnedObjectid
(12000) 고려“고정”, 삭제되지 않도록합니다. (적은 수의 예외가 있습니다.ispinnedObject ()
.) initdbOID 카운터를 강제로FirstunpinnedObjectid
고지되지 않은 물체를 만들 준비가 되 자마자. 따라서 후반 단계에서 생성 된 객체initdb, 예를 들어, 실행 중에 생성 된 개체스키마
스크립트는 고정되지 않으며 모든 객체는 알려진 모든 객체genbki.pl
정상 데이터베이스 작동 중에 할당 된 OID는 16384 이상으로 제한됩니다. 이렇게하면 10000 ~ 16383 범위가 자동으로 할당 된 OID에 대해 무료임을 보장합니다.genbki.pl
또는 동안initdb. 이 자동으로 할당 된 OID는 안정적으로 간주되지 않으며 하나의 설치에서 다른 설치로 변경 될 수 있습니다.
원칙적으로, 한 초기 카탈로그 행에서 다른 초기 카탈로그 행으로의 상호 참조는 참조 필드에 참조 행의 사전 지정된 OID를 작성하는 것만으로도 쓸 수 있습니다. 그러나 이는 프로젝트 정책에 위배됩니다. 오류가 발생하기 쉽고 읽기가 어렵고 새로 할당 된 OID가 흡수되면 파손 될 수 있기 때문입니다.genbki.pl
대신 상징적 참조를 작성하는 메커니즘을 제공합니다. 규칙은 다음과 같습니다.
상징적 참조의 사용을 특정 카탈로그 열에서 첨부하여 활성화합니다BKI_LOOKUP (
열의 정의에LookUprule
)LookUprule
참조 카탈로그의 이름입니다 (예 :PG_PROC
. bki_lookup
유형의 열에 첨부 될 수 있습니다OID
, Regproc
, oidvector
또는oid []
; 후자의 두 경우에서는 배열의 각 요소에 대한 조회를 수행한다는 것을 의미합니다.
첨부 할 수 있습니다bki_lookup (인코딩)
문자 세트 인코딩을 참조하기 위해 정수 열로, 현재 카탈로그 OID로 표시되지는 않지만 알려진 값 세트가 있습니다.genbki.pl
.
일부 카탈로그 열에서는 유효한 참조 대신 항목이 0이 될 수 있습니다. 이것이 허용되면 쓰기bki_lookup_opt
대신bki_lookup
. 그런 다음 쓸 수 있습니다0
항목. (열이 선언 된 경우Regproc
, 선택적으로 쓸 수 있습니다-
대신0
.)이 특별한 경우를 제외하고 A의 모든 항목은bki_lookup
열은 상징적 참조 여야합니다.genbki.pl
인식되지 않은 이름에 대해 경고 할 것입니다.
대부분의 카탈로그 개체는 단순히 이름으로 참조됩니다. 유형 이름은 참조 된와 정확히 일치해야합니다.pg_type
Entry 'stypname
; 와 같은 별칭을 사용하지 않습니다.Integer
forint4
.
함수는 그로 표현할 수 있습니다Proname
, 그것이 독특하다면PG_PROC
entries (이것은 레지프로 입력과 같습니다). 그렇지 않으면Proname (Argtypename, Argtypename, ...)
, 레지 절차. 인수 유형 이름은에있는 것처럼 정확하게 철자를 써야합니다.PG_PROC
Entry 'sproargtypes
필드. 공백을 삽입하지 마십시오.
운영자는oprname (LeftType, Righttype)
.dat
Entry 'soprleft
andoprright
필드. (쓰다0
단지 연산자의 생략 된 피연산자.)
opclass와 opfamilies의 이름은 액세스 방법 내에서만 고유하므로 표시됩니다.access_method_name
/
Object_Name
.
이 경우 스키마 자격을위한 조항이 없습니다. 부트 스트랩 중에 생성 된 모든 객체는에있을 것으로 예상됩니다.PG_CATALOG
스키마
genbki.pl
실행하는 동안 모든 상징적 참조를 해결하고 간단한 숫자 OID를 방출 된 BKI 파일에 넣습니다. 따라서 부트 스트랩 백엔드가 상징적 참조를 처리 할 필요가 없습니다.
OID 참조 열을 표시하는 것이 바람직합니다bki_lookup
또는bki_lookup_opt
카탈로그에 조회가 필요한 초기 스포츠 토토가 없더라도. 이것은 허용genbki.pl
시스템 카탈로그에 존재하는 외국의 주요 관계를 기록합니다. 이 정보는 회귀 테스트에 사용되어 잘못된 항목을 확인합니다.deplare_foreign_key
, deplare_foreign_key_opt
, Declare_Array_foreign_key
및deplare_array_foreign_key_opt
, 이것은 너무 복잡한 외국의 주요 관계를 선언하는 데 사용됩니다bki_lookup
(일반적으로 다중 열 외국 키).
대부분의 스칼라 스포츠 토토 유형은 해당 배열 유형을 가져야합니다 (즉, 요소 유형이 스칼라 유형이며의 표준 Varlena 배열 유형은typarray
스칼라 유형의 필드pg_type
Entry).genbki.pl
생성 할 수 있습니다pg_type
대부분의 경우 배열 유형의 항목.
이 시설을 사용하려면을 작성하십시오.array_type_oid =>
스칼라 유형의 메타 스포츠 토토 필드nnnn
pg_type
Entry, 배열 유형에 사용할 OID를 지정합니다. 그런 다음 생략 할 수 있습니다.typarray
필드, 해당 OID로 자동으로 채워질 것이므로
생성 된 배열 유형의 이름은 밑줄이 선불 된 스칼라 유형의 이름입니다. 배열 항목의 다른 필드는에서 채워졌습니다.bki_array_default (
주석value
)pg_type.h
또는 스칼라 유형에서 복사 한 경우. (특별한 경우도 있습니다typalign
.) 그런 다음Typelem
andtyparray
두 항목의 필드는 서로 교차 참조하도록 설정되어 있습니다.
카탈로그 스포츠 토토 파일을 업데이트 할 때 일반적인 작업을 수행하는 가장 쉬운 방법에 대한 제안이 있습니다.
카탈로그에 기본값이있는 새 열을 추가 :a로 헤더 파일에 열을 추가합니다.bki_default (
주석. 데이터 파일은 기존 값이 필요한 기존 행에 필드를 추가 하여만 조정하면됩니다.value
)
기존 열에 기본값을 추가하지 않는 기존 열에 추가 :A 추가bki_default
헤더 파일에 대한 주석, 실행개혁-파일 만들기
현재 중복 필드 항목을 제거하려면
기본값이 있는지 여부에 관계없이 열을 제거합니다.헤더에서 열을 제거한 다음 실행개혁-파일 만들기
지금은 없어지지 않는 필드 항목을 제거하려면.
기존 기본값 변경 또는 제거 :단순히 헤더 파일을 변경할 수 없습니다. 현재 데이터가 잘못 해석되기 때문입니다. 첫 번째 실행확장-파일 만들기
모든 기본값 값을 명시 적으로 삽입 한 상태에서 데이터 파일을 다시 작성 한 다음 변경 또는 제거bki_default
주석, 그런 다음 실행개혁-파일 만들기
불필요한 필드를 다시 제거하려면
임시 벌크 편집 : for
많은 종류의 벌크 변화를 수행하도록 조정할 수 있습니다. 일회성 코드를 삽입 할 수있는 위치를 보여주는 블록 주석을 찾으십시오.PG_PROC
숯불로 :
기본값으로 새 열을 추가하여pg_proc.h
:
+ / * 아래 Prokind_ 카테고리 참조 * /
을 기반으로 새 스크립트 만들기for
즉시 적절한 값을 삽입하려면 :
- #이 시점에서 우리는 해시로 메모리에 전체 행이 있습니다.
새 스크립트 실행 :
$ CD SRC/포함/카탈로그
이 시점에서PG_PROC
세 열이 모두 있습니다Prokind
, Proisagg
및ProisWindow
, 비 디폴트 값이있는 행에만 나타납니다.
이전 열 제거pg_proc.h
:
- /* 집계입니까? */
마침내, run개혁-파일 만들기
쓸모없는 오래된 항목을 제거하려면PG_PROC
.
대량 편집에 사용되는 스크립트의 추가 예는 참조이름
andOID_SYMBOL
이 메시지에 첨부 :/message-id/cajvsvgvgvx8gxnpm+xa=dxr7kfyprc1tncct5d0o3shfnm6jeha@mail.gmail.com
문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면