와이즈 토토 생성이름AS
(속성_이름 데이터_와이즈 토토[, ... ] )
와이즈 토토 생성이름AS ENUM
( '라벨' [, ... ] )
와이즈 토토 생성이름(
입력 =input_function,
출력 =output_function[ , 수신 =receive_function]
[ , 보내기 =send_function]
[ , TYPMOD_IN =type_modifier_input_function]
[ , TYPMOD_OUT =type_modifier_output_function]
[ , 분석 =분석_기능]
[ , 내부 길이 =내부 길이| 변수 ]
[ , 통과값 ]
[ , 정렬 =정렬]
[ , 저장용량 =저장]
[ , 기본값 =기본값]
[ , 요소 =요소]
[ , 구분 기호 =구분자]
)
와이즈 토토 생성이름
와이즈 토토 생성새 데이터 유형을 등록합니다 현재 데이터베이스에서 사용하기 위해. 유형을 정의하는 사용자 소유자가 됩니다.
스키마 이름이 주어지면 유형은 지정된 스키마. 그렇지 않으면 현재 스키마에 생성됩니다. 유형 이름은 기존 유형의 이름과 달라야 합니다. 또는 동일한 스키마의 도메인. (테이블이 연관되어 있기 때문에 데이터 유형의 경우 유형 이름은 데이터 유형의 이름과도 구별되어야 합니다. 동일한 스키마에 있는 모든 기존 테이블.)
첫 번째 형식와이즈 토토 생성복합 와이즈 토토을 생성합니다. 복합 와이즈 토토은 속성 이름 및 데이터 유형 목록입니다. 이는 본질적으로 테이블의 행 유형과 동일하지만,와이즈 토토 생성실제 생성이 필요하지 않습니다. 테이블에서 원하는 것은 유형을 정의하는 것뿐입니다. 에이 독립형 복합 와이즈 토토은 인수 또는 반환으로 유용합니다. 함수의 종류입니다.
두 번째 형태의와이즈 토토 생성에 설명된 대로 열거(열거) 유형을 생성합니다.섹션 8.7. 열거형 유형은 다음 목록을 취합니다. 하나 이상의 인용 라벨(각 라벨은 다음보다 작아야 함)NAMEDATALEN바이트 길이(한 번에 64 표준PostgreSQL빌드).
의 세 번째 형태와이즈 토토 생성새 기본 와이즈 토토(스칼라 유형)을 생성합니다. 매개변수는 다음과 같습니다. 위에서 설명한 것뿐만 아니라 대부분의 순서대로 나타납니다. 선택 사항입니다. 두 개 이상의 기능을 등록해야 합니다(를 사용하여)함수 생성)을 정의하기 전에 유형. 지원 기능input_function그리고output_function필수이지만 기능receive_function, send_function, type_modifier_input_function, type_modifier_output_function그리고분석_기능선택사항입니다. 일반적으로 이러한 함수는 C 또는 다른 언어로 코딩되어야 합니다. 저급 언어.
그input_function개종하다 와이즈 토토의 외부 텍스트 표현을 내부로 에 대해 정의된 연산자 및 함수에 사용되는 표현 종류.output_function역변환을 수행합니다. 입력 기능은 다음과 같습니다. 유형의 인수 하나를 취하는 것으로 선언됨cstring또는 세 가지 와이즈 토토의 인수를 사용하여cstring, oid, 정수. 첫 번째 인수는 입력입니다. 텍스트를 C 문자열로, 두 번째 인수는 해당 유형의 자체 OID입니다. (대신 요소를 받는 배열 와이즈 토토은 제외) 유형의 OID), 세 번째는typmod알려진 경우 대상 열의 (-1 그렇지 않은 경우 통과됩니다.) 입력 함수는 값을 반환해야 합니다. 데이터 유형 자체의 일반적으로 입력 함수는 다음과 같아야 합니다. 엄격하다고 선언했습니다. 그렇지 않은 경우 NULL로 호출됩니다. NULL 입력 값을 읽을 때 첫 번째 매개변수입니다. 기능 이 경우 오류가 발생하지 않는 한 NULL을 반환해야 합니다. (이 경우는 주로 도메인 입력 기능을 지원하기 위한 것이며, NULL 입력을 거부해야 할 수도 있습니다.) 출력 함수 새로운 데이터 유형의 인수 하나를 취하도록 선언해야 합니다. 출력 함수는 유형을 반환해야 합니다.cstring. NULL에 대해서는 출력 함수가 호출되지 않습니다. 값.
선택사항receive_function유형을 변환합니다. 외부 이진 표현을 내부 표현으로. 이 함수가 제공되지 않으면 해당 유형이 참여할 수 없습니다. 바이너리 입력에서. 이진 표현을 선택해야 합니다. 합리적으로 내부 형식으로 변환하는 데 비용이 적게 듭니다. 휴대용. (예를 들어, 표준 정수 데이터 유형은 다음을 사용합니다. 외부 바이너리 표현으로 네트워크 바이트 순서를 사용하는 반면, 내부 표현은 머신의 기본 바이트에 있습니다. 순서.) 수신 기능은 적절한 검사를 수행해야 합니다 값이 유효한지 확인합니다. 수신 기능은 다음과 같습니다. 유형의 인수 하나를 취하는 것으로 선언됨내부또는 세 가지 와이즈 토토의 인수를 사용하여내부, oid, 정수. 첫 번째 인수는 포인터입니다. 에문자열정보버퍼 보유 수신된 바이트 문자열; 선택적 인수는 다음과 같습니다. 텍스트 입력 기능을 위해. 수신 함수는 다음을 반환해야 합니다. 데이터 유형 자체의 값입니다. 일반적으로 수신 기능 STRICT로 선언해야 합니다. 그렇지 않은 경우 다음과 같이 호출됩니다. NULL 입력 값을 읽을 때 NULL 첫 번째 매개변수입니다. 는 이 경우에도 함수는 NULL을 반환해야 합니다. 오류. (이 경우는 주로 도메인 수신을 지원하기 위한 것입니다. NULL 입력을 거부해야 할 수도 있는 함수입니다.) 마찬가지로, 선택 사항send_function내부 표현에서 외부 표현으로 변환 이진 표현. 이 기능이 제공되지 않으면 유형은 이진 출력에 참여할 수 없습니다. 보내기 기능 새 데이터 유형의 인수 하나를 사용하여 선언해야 합니다. 보내기 함수는 유형을 반환해야 합니다.바이테아. NULL 값에 대해서는 보내기 함수가 호출되지 않습니다.
이 시점에서 당신은 입력과 출력 함수는 결과나 인수를 갖도록 선언될 수 있습니다. 새로운 유형보다 먼저 생성되어야 하는 경우 유형을 생성할 수 있습니다. 대답은 유형이 먼저 이루어져야 한다는 것입니다. 다음과 같이 정의됩니다.쉘 와이즈 토토은 이름과 속성을 제외한 속성이 없는 자리 표시자 유형 소유자. 이는 다음 명령을 실행하여 수행됩니다.와이즈 토토 생성이름, 추가 매개변수 없음. 그런 다음 쉘을 참조하여 I/O 기능을 정의할 수 있습니다. 유형. 마지막으로,와이즈 토토 생성전체 정의는 쉘 항목을 완전하고 유효한 와이즈 토토으로 대체합니다. 정의한 후에는 새 와이즈 토토을 정상적으로 사용할 수 있습니다.
선택사항type_modifier_input_function그리고type_modifier_output_function유형이 수정자를 지원하는 경우 필요하며 이는 선택 사항입니다. 유형 선언에 첨부된 제약 조건(예:문자(5)또는숫자(30,2). 포스트그레SQL사용자 정의 유형을 허용합니다. 하나 이상의 간단한 상수나 식별자를 수정자로 사용합니다. 그러나 이 정보는 다음과 같이 압축될 수 있어야 합니다. 시스템에 저장하기 위한 음수가 아닌 단일 정수 값 카탈로그.type_modifier_input_function통과되었습니다 a 형식의 선언된 수정자cstring배열. 값을 확인해야 합니다. 타당성(잘못된 경우 오류 발생), 그리고 만약 맞습니다. 음수가 아닌 단일 값을 반환합니다.정수컬럼으로 저장될 값"typmod". 유형 수정자는 다음과 같습니다. 유형에가 없으면 거부됩니다.type_modifier_input_function.type_modifier_output_function내부 정수 typmod 값을 다시 올바른 값으로 변환합니다. 사용자 표시용 양식입니다. a를 반환해야 합니다.cstring추가할 정확한 문자열인 값 유형 이름; 예를 들어숫자의 함수가 반환될 수 있습니다.(30,2). 그것은 생략 가능type_modifier_output_function, 기본 표시 형식이 저장된 typmod인 경우 괄호로 묶인 정수 값입니다.
선택사항분석_기능와이즈 토토별 수행 데이터 와이즈 토토의 열에 대한 통계 수집입니다. 기본적으로,분석수집을 시도할 것입니다 와이즈 토토을 사용한 통계"같음"그리고"보다 작음"연산자(있는 경우) 유형에 대한 기본 b-트리 연산자 클래스입니다. 스칼라가 아닌 경우 유형의 이 동작은 부적절할 가능성이 높으므로 사용자 정의 분석 기능을 지정하여 재정의됩니다. 는 분석 함수는 다음의 단일 인수를 취하도록 선언되어야 합니다. 유형내부, 그리고 a를 반환합니다.부울결과. 분석을 위한 상세 API 함수가 다음에 나타납니다.src/include/commands/vacuum.h.
새로운 유형의 내부 표현에 대한 세부사항은 I/O 기능 및 기타 기능에만 알려져 있습니다. 해당 유형과 함께 작동하도록 생성하면 다음과 같은 몇 가지 속성이 있습니다. 선언되어야 하는 내부 표현PostgreSQL. 이들 중 가장 중요한 이다내부 길이. 기본 데이터 와이즈 토토은 고정 길이일 수 있으며, 이 경우내부 길이은 양의 정수이거나 설정으로 표시되는 가변 길이내부 길이에변수. (내부적으로는 다음과 같이 표현됩니다. 설정타이플렌to -1.) 내부 모든 가변 길이 유형의 표현은 다음으로 시작해야 합니다. 이 값의 전체 길이를 제공하는 4바이트 정수 유형.
선택적 플래그PASSEDBYVALUE은 이 데이터 유형의 값이 값으로 전달됨을 나타냅니다. 참고로보다는. 다음과 같은 값 유형을 전달할 수 없습니다. 내부 표현이의 크기보다 큽니다.데이텀와이즈 토토(대부분의 시스템에서는 4바이트, 8 몇 바이트).
그정렬매개변수 데이터 유형에 필요한 스토리지 정렬을 지정합니다. 는 허용되는 값은 1, 2, 4 또는 8바이트 정렬과 동일합니다. 경계. 가변 길이 유형에는 반드시 를 포함하므로 최소 4개의 정렬이 필요합니다.int4첫 번째 구성요소로.
그저장매개변수는 다음을 허용합니다. 가변 길이 데이터 유형에 대한 저장 전략 선택. (만일반허용됩니다 고정 길이 와이즈 토토.)일반지정 해당 유형의 데이터는 항상 인라인으로 저장되며 압축되었습니다.확장다음을 지정합니다. 시스템은 먼저 긴 데이터 값을 압축하려고 시도하고 여전히 값이 너무 큰 경우 기본 테이블 행 밖으로 값을 이동합니다. 길다.외부값이 다음과 같이 허용됩니다. 메인 테이블 밖으로 이동했지만 시스템에서는 이동을 시도하지 않습니다. 압축해 보세요.메인압축을 허용합니다. 하지만 값을 기본 테이블 밖으로 이동하는 것은 권장하지 않습니다. (데이터 이 저장 전략을 사용하는 항목은 여전히 다른 곳으로 이동할 수 있습니다. 행을 맞추는 다른 방법이 없는 경우 기본 테이블을 사용하지만 그들은 우선적으로 메인 테이블에 보관될 것입니다.확장그리고외부항목.)
사용자가 원하는 경우 기본값을 지정할 수 있습니다. 데이터 유형의 열은 기본적으로 null 값입니다. 를 사용하여 기본값을 지정합니다.기본값키워드. (이러한 기본값은 명시적으로 재정의됨기본값특정 열에 연결된 절입니다.)
유형이 배열임을 나타내려면, 를 사용하는 배열 요소요소키 단어. 예를 들어 4바이트 정수 배열을 정의하려면 (int4), 지정요소 = int4. 배열 와이즈 토토에 대한 자세한 내용 아래에 나타납니다.
다음 값 사이에 사용되는 구분 기호를 나타냅니다. 이 유형의 배열의 외부 표현구분자특정으로 설정할 수 있습니다. 성격. 기본 구분 기호는 쉼표()입니다.,). 구분 기호는 다음과 연관되어 있습니다. 배열 와이즈 토토 자체가 아닌 배열 요소 유형입니다.
사용자 정의 와이즈 토토이 생성될 때마다포스트그레SQL자동으로 생성됩니다. 기본 와이즈 토토의 이름으로 구성된 연관된 배열 와이즈 토토 이름 앞에 밑줄이 추가되고 필요한 경우 잘립니다. 미만으로 유지하려면NAMEDATALEN바이트 길다. (생성된 이름이 기존 유형과 충돌하는 경우 이름이 충돌하지 않는 이름이 나올 때까지 프로세스가 반복됩니다. 발견.) 이 암시적으로 생성된 배열 와이즈 토토은 가변 길이입니다. 내장된 입력 및 출력 기능을 사용합니다.array_in그리고array_out. 배열 와이즈 토토은 해당 요소 유형 소유자의 변경 사항을 추적합니다. 또는 스키마이며 요소 유형이 다음과 같은 경우 삭제됩니다.
이유가 왜 있는지 합리적으로 물어볼 수 있습니다.요소옵션, 시스템이 올바른 경우 자동으로 배열 와이즈 토토을 지정합니다. 유용한 유일한 경우 사용요소이것은 당신이 내부적으로 배열인 고정 길이 유형 동일한 수의 항목이 있으며 이러한 항목을 허용하려고 합니다. 구독을 통해 직접 액세스할 수 있습니다. 유형에 대해 제공하려는 작업이 무엇이든 전체. 예를 들어 다음을 입력하세요.포인트이다 단지 두 개의 부동 소수점 숫자로 표현됩니다. 다음과 같이 액세스됩니다.점[0]그리고점[1]. 참고로 이 시설은 내부 형식이 정확히 다음과 같은 고정 길이 유형에 대해 작동합니다. 동일한 고정 길이 필드의 시퀀스. 첨자 가능 가변 길이 유형에는 일반화된 내부 속성이 있어야 합니다. 에서 사용하는 표현array_in그리고array_out. 역사적인 이유로 (즉, 이것은 분명히 잘못된 것이지만 변경하기에는 너무 늦었습니다. it), 고정 길이 배열 와이즈 토토의 첨자는 0부터 시작합니다. 가변 길이 배열의 경우보다는 하나입니다.
대상 유형의 이름(선택적으로 스키마 한정) 생성되었습니다.
복합의 속성(열) 이름 유형.
열이 될 기존 데이터 유형의 이름 복합 와이즈 토토입니다.
텍스트 라벨을 나타내는 문자열 리터럴 열거형 유형 중 하나의 값과 연결됩니다.
데이터를 변환하는 함수의 이름은 유형의 외부 텍스트 형식을 내부 형식으로 변환합니다.
데이터를 변환하는 함수의 이름은 유형의 내부 형식을 외부 텍스트 형식으로 변환합니다.
데이터를 변환하는 함수의 이름 유형의 외부 바이너리 형식을 내부 형식으로 변환합니다.
데이터를 변환하는 함수의 이름 유형의 내부 형식을 외부 바이너리 형식으로 변환합니다.
배열을 변환하는 함수의 이름 유형에 대한 수정자를 내부 형식으로 변환합니다.
내부 형식을 변환하는 함수의 이름 외부 텍스트 형식에 대한 유형 수정자.
통계를 수행하는 함수의 이름 데이터 유형에 대한 분석입니다.
길이를 바이트 단위로 지정하는 숫자 상수 새로운 유형의 내부 표현. 기본값 가변 길이라고 가정합니다.
데이터 유형의 저장 정렬 요구사항입니다. 만약에 지정되어야 합니다.문자, int2, int4, 또는더블; 기본값은int4.
데이터 유형에 대한 저장 전략. 지정한 경우, 이어야 합니다일반, 외부, 확장, 또는메인; 기본값은일반.
데이터 유형의 기본값입니다. 이것을 생략하면, 기본값은 null입니다.
생성되는 유형은 배열입니다. 이는 다음을 지정합니다. 배열 요소의 유형입니다.
값 사이에 사용되는 구분 문자입니다. 이 유형으로 구성된 배열입니다.
데이터 유형을 한 번만 사용하는 데 제한이 없기 때문에 생성되었으므로 기본 와이즈 토토을 생성하는 것은 권한을 부여하는 것과 같습니다. 유형에 언급된 기능에 대한 공개 실행 권한 정의. (따라서 해당 유형의 작성자는 다음을 소유해야 합니다. 이러한 기능.) 이는 일반적으로 다음과 같은 종류의 문제는 아닙니다. 유형 정의에 유용한 함수. 하지만 당신은 그럴 수도 있어요 유형을 디자인하기 전에 두 번 생각하고 싶습니다. 필요하다"비밀"정보가 될 것입니다 외부 형식으로 또는 외부 형식으로 변환하는 동안 사용됩니다.
이전포스트그레SQL버전 8.3에서는 생성된 배열 와이즈 토토의 이름이 항상 정확히 하나의 밑줄 문자()를 포함한 요소 유형 이름_)이 앞에 붙습니다. (따라서 유형 이름은 길이는 다른 이름보다 한 글자 적게 제한됩니다.) 여전히 일반적이지만 배열 와이즈 토토 이름은 다음과 같습니다. 최대 길이의 이름이 있거나 다음과 충돌하는 경우에는 이와 다릅니다. 밑줄로 시작하는 사용자 유형 이름. 코드 작성 따라서 이 규칙에 따라 달라지므로 더 이상 사용되지 않습니다. 대신에 다음을 사용하세요.pg_type.typarray연관된 배열 와이즈 토토을 찾으려면 특정 유형으로.
다음과 같은 유형 및 테이블 이름을 사용하지 않는 것이 좋습니다. 밑줄로 시작하세요. 서버가 변경되는 동안 생성됨 사용자가 지정한 이름과의 충돌을 피하기 위해 배열 와이즈 토토 이름이 있습니다. 특히 오래된 클라이언트 소프트웨어에서는 여전히 혼란의 위험이 있습니다. 밑줄로 시작하는 유형 이름은 항상 가정할 수 있습니다. 배열을 나타냅니다.
이전PostgreSQL버전 8.2, 구문와이즈 토토 생성이름존재하지 않았습니다. 만드는 방법 새로운 기본 와이즈 토토은 입력 기능을 먼저 생성하는 것이었습니다. 이에 접근,PostgreSQL먼저 입력의 반환 유형으로 새 데이터 유형의 이름을 참조하십시오. 기능. 이 상황에서는 쉘 와이즈 토토이 암시적으로 생성됩니다. 그런 다음 나머지 정의에서 참조할 수 있습니다. I/O 기능. 이 접근 방식은 여전히 작동하지만 더 이상 사용되지 않으며 일부 향후 릴리스에서는 허용되지 않을 수 있습니다. 또한, 이를 방지하기 위해 결과적으로 실수로 쉘 와이즈 토토으로 카탈로그가 복잡해졌습니다. 함수 정의의 단순한 오타로 인해 쉘 와이즈 토토은 C로 입력 함수를 작성할 때 이런 식으로 작성됩니다.
에포스트그레SQL이전 버전 7.3에서는 쉘 와이즈 토토을 전혀 생성하지 않는 것이 관례였습니다. 유형 이름에 대한 함수의 전방 참조를 다음으로 대체합니다. 자리 표시자 유사 유형불투명.cstring인수와 결과도 다음과 같이 선언됩니다.불투명7.3 이전. 받는 사람 오래된 덤프 파일 로딩을 지원합니다.만들기 와이즈 토토다음을 사용하여 선언된 I/O 함수를 허용합니다불투명, 하지만 알림을 발행하고 올바른 와이즈 토토을 사용하려면 함수 선언을 사용하세요.
이 예는 복합 와이즈 토토을 생성하고 이를 다음에서 사용합니다. 함수 정의:
CREATE TYPE compfoo AS (f1 int, f2 text);
함수 만들기 getfoo()는 SETOF compfoo를 $$로 반환합니다.
SELECT fooid, fooname FROM foo
$$ 언어 SQL;
이 예는 열거 와이즈 토토을 생성하고 이를 테이블에서 사용합니다 정의:
CREATE TYPE bug_status AS ENUM ('신규', '열림', '닫힘');
CREATE TABLE 버그(
ID 일련번호,
설명 텍스트,
상태 버그_상태
);
이 예는 기본 데이터 와이즈 토토을 생성합니다.상자그런 다음 테이블 정의의 유형을 사용합니다.
CREATE TYPE 상자;
CREATE FUNCTION my_box_in_function(cstring) 상자를 AS로 반환합니다 ... ;
함수 생성 my_box_out_function(box) cstring AS를 반환합니다 ... ;
와이즈 토토 생성 상자(
내부 길이 = 16,
입력 = my_box_in_function,
출력 = my_box_out_function
);
테이블 생성 myboxes(
ID 정수,
설명 상자
);
내부 구조가상자이었어 4개의 배열플로트4요소, 우리는 아마도 대신 다음을 사용하세요:
CREATE TYPE 상자(
내부 길이 = 16,
입력 = my_box_in_function,
출력 = my_box_out_function,
요소 = float4
);
이것은 상자 값의 구성요소 번호가 구독을 통해 액세스됩니다. 그렇지 않으면 유형은 다음과 동일하게 동작합니다. 전에.
이 예는 대형 개체 유형을 생성하고 이를 다음에서 사용합니다. 테이블 정의:
유형 bigobj 생성(
입력 = lo_filein, 출력 = lo_fileout,
내부 길이 = 가변적
);
테이블 생성 big_objs(
ID 정수,
obj 빅OBJ
);
적절한 입력 및 출력 기능을 포함한 더 많은 예, 에 있습니다PostgreSQL : 문서 : 8.3 : 사용자 정의 범퍼카 토토.