PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Fast Forward | Next |
CREATE TYPE name AS ( attribute_name data_type [, ... ] ) CREATE TYPE name ( INPUT = input_function, OUTPUT = output_function [ , RECEIVE = receive_function ] [ , SEND = send_function ] [ , ANALYZE = analyze_function ] [ , INTERNALLENGTH = { internallength | VARIABLE } ] [ , PASSEDBYVALUE ] [ , ALIGNMENT = alignment ] [ , STORAGE = storage ] [ , DEFAULT = default ] [ , ELEMENT = element ] [ , DELIMITER = delimiter ] )
CREATE TYPE Ϊ��ǰ���ݿ�ע��һ���µ��������͡� ��������͵��û���Ϊ�������ߡ�
�������ģʽ������ô����������ָ��ģʽ�д����� ���������ڵ�ǰģʽ�д����������������ͬһģʽ���κ����е����ͻ�����ͬ�� ����Ϊ���������������ϵ�����������ܺ�ͬģʽ�еı����ֳ�ͻ����
��һ����ʽ�� CREATE TYPE ����һ���������͡� ����������ͨ��һ�����������������������ġ�����ʵ���Ϻ�һ�����������һ���� �����������ֻ���붨��һ�����ͣ���ôʹ�� CREATE TYPE ������ֱ�Ӵ���ʵ�ʵı� һ�������ĸ���������һ�������IJ������߷��������Ƿdz����õġ�
�ڶ�����ʽ��CREATE TYPE����һ���µĻ������ͣ��������ͣ��� ���������������˳����֣�������������ʾ�����������Ҵ�������ǿ�ѡ�ġ� ��Ҫ��Ҫ�ڶ�������֮ǰ��ע��������������CREATE FUNCTION����� ֧�ֺ��� input_function �� output_function �DZ���ģ� ������ receive_function�� send_function �� analyze_function �ǿ�ѡ�ġ� ͨ������Щ���������� C ���������Ͳ����Ա�д��
���� input_function �������͵��ⲿ�ı���ʽת���ɿ��Ա��Ը����Ͳ����IJ������ͺ���ʶ����ڲ���ʽ�� output_function �����෴��;�� ���뺯����������Ϊ����һ������Ϊ c_string �IJ��������߽����������ͷֱ�Ϊ c_string��oid��integer �IJ����� ��һ�������� C �ִ���ʽ�������ı����ڶ������ڸ�����Ϊ��������ʱ��Ԫ�ص����� OID�� ����������Ǹ������ͣ������Լ��� OID�� ��������Ŀ���ֶε�typmod�������֪�Ļ���������ǣ������� -1���� ��Ӧ�÷���һ�����������ͱ������ֵ�� ���������������Ϊ����һ������Ϊ���������͵IJ����� ���߽����������ͣ��ڶ��������������� oid�� �ڶ�������Ҳ�������������͵�����Ԫ������ OID �����Ǹ��������Լ��� OID���������Ӧ�÷������� cstring��
��ѡ�� receive_function �Ѹ����͵��ⲿ�����Ʊ�����ʽת�����ڲ�������ʽ�� ���û���ṩ�����������ô�����Ͳ����ö��������롣�����Ƹ�ʽӦ��ѡȡ����ת�����ڲ���ʽ�Ƚ����ģ�ͬʱ����һ����ֲ�Եġ� �����磬����������������ʹ�������ֽ�����Ϊ�ⲿ�Ķ����Ʊ�����ʽ�����ڲ�������ʽ�ǻ����ı����ֽ��� ���պ���Ӧ������Ϊ����һ������Ϊ internal �IJ����������������ͷֱ�Ϊ internal �� oid �IJ����� �����뷵��һ�����������������ֵ������һ��������һ��ָ��һ�� StringInfo �������ģ���������ֽڴ���ָ�룻 ��ѡ�ĵڶ���������Ԫ������ OID �������������һ���������͵Ļ�������Ǹ������ͣ����������Լ��� OID���� ���Ƶģ���ѡ�� send_function ������ת��Ϊ�ⲿ�����Ʊ�����ʽ�� ���û���ṩ��Щ��������ô���;Ͳ����ö����Ʒ�ʽ��������ͺ�����������Ϊ����һ�����������ͣ� ���߽��������������ڶ��������������� oid���ڶ���������Ȼ���������͵�����Ԫ�� OID ���߸���������������Լ���OID�� ���ͺ������뷵�� bytea��
���ʱ����Ӧ�þ�����֣�������������������ô��������Ϊ���������͵Ľ�������ǽ��������͵IJ����� �������������ʹ���֮ǰ����Ҫ�������ǡ� �������뺯�������ȴ�����Ȼ�������������������������͡� PostgreSQL �����Ȱ����������͵����ֿ������뺯���ķ������͡� ��������һ��"��"���ͣ��������ֻ���� pg_type�����һ��ռλ����Ȼ������뺯�������������������������� ���Ƶ���������������ӵ��������Ѿ����ڣ��Ŀ����͡���� CREATE TYPE ������������滻�����������Ͷ��壬�����Ϳ���ʹ���������ˡ�
��ѡ�� analyze_function Ϊ���������͵��ֶ�ִ�����������ص�ͳ����Ϣ�ֻ��� ȱʡ��ʱ������������и�ȱʡ�� b-tree ����������ôANALYZE ����ͼʹ�ø����͵�"����"��"С��"�������� ���ڷDZ������ͣ�������Ϊ�ܿ��ܲ����ʣ�������ǿ���ͨ���ṩһ���ͻ����ķ��������������� ����������������Ϊ����һ������Ϊ internal ��һ�����������ҷ���һ�� boolean ֵ�� ������������ϸ API �� src/include/commands/vacuum.h �
���������͵��ڲ�������ʽֻ�� I/O �����������㴴����ʹ�ø����͵ĺ����˽⣬ ���ڲ����ֻ����м������Ա���Ϊ PostgreSQL ������ ��Щ������Ҫ���� internallength�� �����������Ϳɶ����Ϊ��������ʱ internallength ��һ����������Ҳ�����DZ䳤�ģ�ͨ���� internallength ����Ϊ VARIABLE ��ʾ�������ڲ������״̬ ��ͨ����typlen����Ϊ -1 ʵ�ֵġ������б䳤���͵��ڲ���ʽ��������һ�����ֽ�������ͷ������������������������ֵ��ȫ����
��ѡ�ı�� PASSEDBYVALUE ���������͵���ֵ����ֵ���ݵģ� �����������á��㲻�ܴ�����Щ�ڲ���ʽ���� Datum ��������������� 4 �ֽڣ���Щ�� 8 �ֽڣ����͵ijߴ���������͵�ֵ��
alignment ������������������Ҫ��Ķ���洢��ʽ�� �������ֵ��Ч�ڰ��� 1��2��4������ 8 �ֽڱ߽���롣��ע��䳤���ͱ��������� 4 �ֽڵĶ��룬 ��Ϊ���DZ������һ�� int4 ��Ϊ���ǵĵ�һ���ɷݡ�
storage ��������Ϊ�䳤��������ѡ��洢���ԡ� ����������ֻ����ʹ�� plain���� plain �������������������������ķ�ʽ������ѹ���ķ�ʽ�洢�� extended ����ϵͳ��������ͼѹ��һ����������ֵ��Ȼ���������Ȼ̫���Ļ��ͽ�����ֵ�Ƴ�������У� ��ϵͳ������ѹ������ main ����ѹ�������Dz��ɰ���ֵ�ƶ������� �������ִ洢���Ե�����������Խ��ƶ�������������ܷ���һ����Ļ��� �������ǽ��� extended �� external ���Ը������������
����û�ϣ���ֶε���������ȱʡʱ���� NULL����������ʲô������ ��ô���������һ��ȱʡֵ�� �� DEFAULT �ؼ�����������ȱʡֵ�� ��������ȱʡ���Ա��������ض��ֶ��ϵ���ȷ�� DEFAULT �Ӿ串�ǡ���
Ҫ��ʾһ�����������飬�� ELEMENT �ؼ�����������Ԫ�ص����͡� ���磬Ҫ����һ�� 4 �ֽ�����(int4)�����飬����
ELEMENT = int4
�� �й��������͵ĸ���ϸ��������������
Ҫ����������������������ⲿ��ʽ����ֵ֮��ķָ��������� delimiter ����ָ���ָ�����ȱʡ�ķָ����Ƕ��ţ�,���� ��ע��ָ����Ǻ�����Ԫ��������������������������ͱ���
�ڴ����û������������͵�ʱ��PostgreSQL �Զ�����һ����֮�������������ͣ��������ɸû������͵�����ǰһ���»�����ɡ� ������������������ͳ�����ҰѶ�����Ϊ foo[] ���ֶε�����ת���ɶ�����Ϊ _foo ���ֶε���������������������������DZ䳤����ʹ���ڽ��������������� array_in �� array_out��
��ܿ��ܻ������ϵͳ�Զ�������ȷ���������ͣ���Ϊʲô�и� ELEMENTѡ�ʹ�� ELEMENT ���õ�Ψһ�ij��������������Ķ��������������ڲ���һ��һ����Ŀ��ͬ��������飬 �������������� N ���������ͨ���ű�ֱ�ӹ������Լ���Щ�����Ѹ����͵���������еIJ����� ���磬���� name �������乹�� char �����ַ��������� һ����ά�� point ����Ҳ�����������������ɸ����Ͱ������� point[0] �� point[1] �ķ��������� ��ע���������ֻ��������Щ�ڲ���ʽ��һ����ͬ�Ķ���������е����͡� һ�����Խű껯�ı䳤���ͱ����б� array_in �� array_out ʹ�õ�һ�㻯���ڲ�������ʽ�� ������ʷԭ��Ҳ����˵����Щ���Դ���������̫�ٵ����⣩�������������͵Ľű���㿪ʼ����������䳤���������Ĵ�һ��ʼ��
��Ҫ��������������������ģʽ���Σ���
�������͵�һ�����ԣ��ֶΣ������֡�
һ��Ҫ��Ϊһ���������͵��ֶε������������͵����֡�
һ�����������ƣ� �����ݴ��ⲿ����ת�����ڲ����͡�
һ�����������ƣ� �����ݴ��ڲ���ʽת����������ʾ����ʽ��
�����ݴ����͵��ⲿ��������ʽת�������ڲ���ʽ�ĺ��������֡�
�����ݴ����͵��ڲ���ʽת�������ⲿ��������ʽ�ĺ�������
Ϊ����������ִ��ͳ�Ʒ����ĺ�������
һ����ֵ������˵�������͵��ڲ�������ʽ�ij��ȡ�ȱʡ�ļ��������DZ䳤�ġ�
���������͵Ĵ洢����Ҫ����������ˣ������� char�� int2�� int4 �� double�� ȱʡ�� int4��
���������͵Ĵ洢���ԡ���������ˣ������� plain��external�� extended���� main�� ȱʡ�� plain��
�����͵�ȱʡֵ��ͨ����ʡ�����ģ�����ȱʡ�� NULL��
�����������������飻�����������Ԫ�ص����͡�
���������������Ԫ��֮��ָ������ַ���
�û������������������»��ߣ�_�� ��ͷ����ֻ���� 62 ���ַ�����������ͨ���� NAMEDATALEN-2�� �������������������Ŀ����� NAMEDATALEN-1 ���ַ����� ���»��߿�ͷ�����������������ڲ�������������������
�� PostgreSQL �汾 7.3 ��ǰ������Ҫͨ��ʹ��ռλα���� opaque ���溯����ǰ�����������ⴴ�������͡� 7.3 ֮ǰ cstring �����ͽ��ͬ����Ҫ����α opaque�� Ҫ֧��װ�ؾɵ�ת�����Ǽ䣬CREATE TYPE ��������Щ�� opaque�����ĺ����� �������ط���һ��֪ͨ��������ȷ�����ı亯����������
������Ӵ���һ���������Ͳ�����һ������������ʹ������
CREATE TYPE compfoo AS (f1 int, f2 text); CREATE FUNCTION getfoo() RETURNS SETOF compfoo AS $$ SELECT fooid, fooname FROM foo $$ LANGUAGE SQL;
��������box�������ͣ����ҽ�������������һ�����壺
CREATE TYPE box ( INTERNALLENGTH = 16, INPUT = my_box_in_function, OUTPUT = my_box_out_function ); CREATE TABLE myboxes ( id integer, description box );
��� box ���ڲ��ṹ��һ���ĸ� float4 �����飬���ǿ���˵
CREATE TYPE box ( INTERNALLENGTH = 16, INPUT = my_box_in_function, OUTPUT = my_box_out_function, ELEMENT = float4 );
������һ�� box ����ֵ�ɷֳ�Ա�����ýű���ʡ� ��������ͺ�ǰ�����Ϊһ����
���������һ����������Ͳ���������һ�����壺
CREATE TYPE bigobj ( INPUT = lo_filein, OUTPUT = lo_fileout, INTERNALLENGTH = VARIABLE ); CREATE TABLE big_objs ( id integer, obj bigobj );
��������ӣ��������ʵ����������������� Section 31.11��