PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 8. �������� | Fast Forward | Next |
������������һ�л���һ����¼�Ľṹ�� ��ʵ����ֻ��һ���ֶ��������ǵ��������͵��б� PostgreSQL �������������������ʹ�ø������͡� ���磬һ�����ij���ֶο�������Ϊһ���������͡�
�������������帴�����͵ļ����ӣ�
CREATE TYPE complex AS ( r double precision, i double precision ); CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );
������� CREATE TABLE��ֻ������ֻ���������ֶ����ֺ����ͣ� Ŀǰ��������Լ�������� NOT NULL �����ģ�����ע�� AS �ؼ����Ǻ���Ҫ�ģ� û������ϵͳ����Ϊ������ȫ��ͬ�� CREATE TYPE ��������ῴ����ֵ������
���������ͣ����ǾͿ�������������
CREATE TABLE on_hand ( item inventory_item, count integer ); INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);
���ߺ�����
CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric AS 'SELECT $1.price * $2' LANGUAGE SQL; SELECT price_extension(item, 10) FROM on_hand;
���㴴�����ʱ��Ҳ���Զ�����һ���������ͣ��������������ͬ����ʾ�ñ�ĸ������͡� ���磬�������˵��
CREATE TABLE inventory_item ( name text, supplier_id integer REFERENCES suppliers, price numeric CHECK (price > 0) );
Ȼ��������ʾ����ͬ�� inventory_item ��������Ҳ����Ϊ����Ʒ������ ���ҿ��Ժ�����һ��ʹ�á���������Ҫע��Ŀǰ��ʵ�ֵ�һ����Ҫ���ƣ���Ϊ���ڻ�û��Լ�������������ᣬ �����ڱ�������ʾ��Լ�����������ڱ�֮��ĸ������͡� ��һ�������ƿ��İ취��ʹ����������Ϊ�������͵ij�Ա����
Ҫ���ı�������д��������ֵ����Բ�������Χ�ֶ�ֵ�����ö��ŷָ����ǡ� ��������κ��ֶ�ֵ��Χ����˫���ţ����ֵ����������Ż���Բ�������������˫�������� ������ϸ�ڼ����档����ˣ��������ͳ�����һ���ʽ���£�
'( val1 , val2 , ... )'
һ��������
'("fuzzy dice",42,1.99)'
��� inventory_item ������ǰ���Ѿ������ˣ���ô����һ���Ϸ�����ֵ�� Ҫ��һ���ֶ��ǿգ���ô���б�������λ���ϲ�Ҫд�κ��ַ������磬������������ڵ������ֶ�����һ�� NULL��
'("fuzzy dice",42,)'
�������Ҫһ�����ִ��������� NULL��дһ��˫���ţ�
'("",42,)'
����ĵ�һ���ֶ���һ���� NULL ���ִ����������ֶ��� NULL��
����Щ����ʵ����ֻ�������� Section 4.1.2.5 ���۵�һ�����ͳ�����һ���������ӡ� ��Щ����һ��ʼֻ�ǵ����ִ���Ȼ�ݸ�������������ת�����̡�һ����ȷ���������������DZ���ġ���
����Ҳ������ ROW ���ʽ������츴������ֵ�� �ڴ���������£����ַ����������ִ��ı����������Ϊ�㲻�ò��Ķ������š� �����Ѿ�������ʹ�������ַ����ˣ�
ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL)
ֻҪ���ڱ��ʽ���г���һ���ֶΣ���ô�ؼ��� ROW ��ʵ�����ǿ�ѡ�ģ� ���Կ��Լ�Ϊ
('fuzzy dice', 42, 1.99) ('', 42, NULL)
ROW ���ʽ���Section 4.2.11 ���и���ϸ�����ۡ�
Ҫ���ʸ��������ֶε�һ��������д��һ�����Լ�������֣��dz����ƴ�һ����������ѡ��һ���ֶΡ� ʵ���ϣ���Ϊʵ��̫��ӱ�������ѡȡ�ֶΣ��������Ǿ�����Ҫ��Բ��������������������� ���磬�������Ҫ�� on_hand ���ӱ���ѡȡһЩ����������������
SELECT item.name FROM on_hand WHERE item.price > 9.99;
���������ܹ�������Ϊ���� SQL ��� item �Ǵ�һ��������ѡȡ�ģ�������һ�������֡� ���������������д��
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
���������Ҳ��Ҫʹ�ñ����֣����磬��һ������ѯ�����ôд��
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;
����Բ����������ȷ�ؽ���Ϊһ��ָ�� item �ֶε����ã�Ȼ��Ϳ��Դ���ѡȡ����
���Ƶ���������������κεص��һ����������ֵ�в�ѯһ���� ���磬Ҫ��һ�����ظ�������ֵ�ĺ�����ֻѡ��һ���ֶΣ�����Ҫд�����������Ķ���
SELECT (my_func(...)).field FROM ...
���û�ж����Բ�����������һ�������
������һЩ������¸��������ֶε���ȷ������ȣ�������߸��������ֶΣ�
INSERT INTO mytab (complex_col) VALUES((1.1,2.2)); UPDATE mytab SET complex_col = ROW(1.1,2.2) WHERE ...;
��һ������ʡ���� ROW���ڶ���ʹ���������������ַ������С�
���ǿ��Ը���һ�������ֶεĶ�������
UPDATE mytab SET complex_col.r = (complex_col).r + 1 WHERE ...;
��ע�⣬�������Dz���Ҫ��ʵ�����Dz��ܣ��� SET ������ֵ��ֶ�����Χ����Բ������ ���������ڵȺ��ұߵı��ʽ������ͬһ���ֶε�ʱ��ȴ��ҪԲ������
����Ҳ�������������� INSERT ��Ŀ�꣺
INSERT INTO mytab (complex_col.r, complex_col.i) VALUES(1.1, 2.2);
�������û��Ϊ�ֶε����������ṩ��ֵ����ôʣ�µ������ÿ�ֵ��䡣
һ���������͵��ı�������ʽ������Щ���ݶ��������������� I/O ת������������ ����һЩ�������Ǹ��Ͻṹ�����Ρ���Щ���ΰ���������ֵ��Χ��Բ������( �� )���� ����������֮��Ķ��ţ�,����Բ��������Ŀհױ����ԣ�������Բ�������棬 ��������������ֵ��һ���֣����ݸ�������������ͣ���Щ�հ������ã�Ҳ����û�á� ���磬��
'( 42)'
����������������������ô�հ������ԣ�����������ı�����ô�Ͳ�����ԡ�
��ǰ����ʾ���������ڸ�һ����������д��ֵ��ʱ��������ڶ�����������ֵ��Χ��˫���Ű�Χ�� ���������ֵ�ᵼ�¸�����ֵ���������壬��ô��������ô���� �ر����������Բ���������ţ�˫���ţ����߷�б�ܵij��ϣ�������˫������������ Ҫ����˫������������������ֵ�����˫���ţ���ô����Ҫ����ǰ���һ����б�ܡ� ��ͬ������һ��˫���������������ֵ�����һ��˫���ű�ʾһ��˫�����ַ������� SQL �ִ��ı��ĵ����Ź���һ������ ���⣬������÷�б�����ݵķ����������п��ܻᵱ������������������ַ���
һ����ȫ�յ�������ֵ���ڶ��Ż��߶�����Բ����֮��û���ַ�����ʾһ�� NULL�� Ҫдһ�����ִ���������һ�� NULL��д ""��
����������ֵ�ǿ��ִ����߰���Բ���������ţ�˫���ţ���б�ܻ��߿հף���������������̻���������ֵ��Χ����˫���š� ��Ϊ�հ���ô�����DZ���ģ����ǿ�����ǿ���ԡ�����һ��������ֵ����Ƕ���˫���źͷ�б�ܽ���д�����ݡ�
ע��: ��ע����д���κ� SQL ������ȱ������ִ��ı�������Ȼ��ŵ����������͡� ��ͼӱ�������Ҫ�ķ�б����Ŀ�����磬Ҫ����һ������˫���ź�һ����б�ܵ� text ����һ������������ֵ� ����Ҫд
INSERT ... VALUES ('("\\"\\\\")');�ִ��ı��������ȳԵ�һ�㷴б�ܣ������������ͷ������Ķ����������� ("\"\\")�� Ȼ���ִ���� text �������͵�������̣���� "\�� �����������Ե��������ͻ���Է�б������������� bytea�� ��ô���ǿ�����Ҫ����������˸���б���Ի�ȡ�ڴ洢�ĸ���������������һ����б�ܡ��� ��Ԫ����Χ������ Section 4.1.2.2���������ڱ���˫�ݷ�б�ܵ����⡣
��ʾ: �� SQL ������д��������ֵ��ʱ��ROW ������ͨ���ȸ����ı��������ʹ�á� �� ROW �������������ֵ��д���Ͳ�����Ϊ�������͵ij�Ա��д�ķ���һ����