CREATE TYPE

Name

CREATE TYPE -- ����һ���µ���������

Synopsis

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 ʹ�õ�һ�㻯���ڲ�������ʽ�� ������ʷԭ��Ҳ����˵����Щ���Դ��󵫲�������̫�ٵ����⣩�������������͵Ľű���㿪ʼ����������䳤���������Ĵ�һ��ʼ��

����

name

��Ҫ��������������������ģʽ���Σ���

attribute_name

�������͵�һ�����ԣ��ֶΣ������֡�

data_type

һ��Ҫ��Ϊһ���������͵��ֶε������������͵����֡�

input_function

һ�����������ƣ� �����ݴ��ⲿ����ת�����ڲ����͡�

output_function

һ�����������ƣ� �����ݴ��ڲ���ʽת����������ʾ����ʽ��

receive_function

�����ݴ����͵��ⲿ��������ʽת�������ڲ���ʽ�ĺ��������֡�

send_function

�����ݴ����͵��ڲ���ʽת�������ⲿ��������ʽ�ĺ�������

analyze_function

Ϊ����������ִ��ͳ�Ʒ����ĺ�������

internallength

һ����ֵ������˵�������͵��ڲ�������ʽ�ij��ȡ�ȱʡ�ļ��������DZ䳤�ġ�

alignment

���������͵Ĵ洢����Ҫ����������ˣ������� char�� int2�� int4 �� double�� ȱʡ�� int4��

storage

���������͵Ĵ洢���ԡ���������ˣ������� plain��external�� extended���� main�� ȱʡ�� plain��

default

�����͵�ȱʡֵ��ͨ����ʡ�����ģ�����ȱʡ�� NULL��

element

�����������������飻�����������Ԫ�ص����͡�

delimiter

���������������Ԫ��֮��ָ������ַ���

ע��

�û������������������»��ߣ�_�� ��ͷ����ֻ���� 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��

������

CREATE TYPE ������ PostgreSQL ��չ���� SQL:1999 ����һ�� CREATE TYPE ��䣬����ϸ���Ϻ� PostgreSQL ���бȽϴ�����

�ּ�

CREATE FUNCTION, DROP TYPE, ALTER TYPE