Chapter 8. ��������

Table of Contents
8.1. ��ֵ����
8.1.1. ��������
8.1.2. ���⾫����ֵ
8.1.3. ����������
8.1.4. Serial����ţ�����
8.2. ��������
8.3. �ַ�����
8.4. ��������������
8.5. ����/ʱ������
8.5.1. ����/ʱ������
8.5.2. ����/ʱ�����
8.5.3. ʱ��
8.5.4. �ڲ�
8.6. ��������
8.7. ��������
8.7.1. Point���㣩
8.7.2. �߶�
8.7.3. Box������
8.7.4. Path��·����
8.7.5. Polygon�������
8.7.6. Circle��Բ��
8.8. �����ַ��������
8.8.1. inet
8.8.2. cidr
8.8.3. inet �� cidr �Ա�
8.8.4. macaddr
8.9. �����
8.10. ����
8.10.1. �������͵�����
8.10.2. ����ֵ����
8.10.3. ��������
8.10.4. �޸�����
8.10.5. ���������
8.10.6. �������������﷨
8.11. ��������
8.11.1. ������������
8.11.2. ��������ֵ����
8.11.3. ���ʸ�������
8.11.4. �޸ĸ�������
8.11.5. �����������������﷨
8.12. �����ʶ������
8.13. ���

PostgreSQL ���ŷḻ���������Ϳ��á� �û�����ʹ�� CREATE TYPE����Ϊ PostgreSQL �����µ��������͡�

Table 8-1 ��ʾ���������õ���ͨ�������͡� ��"����"�����г��Ĵ������ѡ���ֶ�������ʷԭ�� PostgreSQL ���ڲ�ʹ�õ����֡� ���⣬����һЩ�ڲ�ʹ�õĻ��߷���������Ҳ�����ã���û���������г���

Table 8-1. ��������

������������
bigintint8�з��� 8 �ֽ�����
bigserialserial8�������ֽ�����
bit [ (n) ] ����λ��
bit varying [ (n) ]varbit�䳤λ��
booleanbool�߼������� ����/�٣�
box ƽ���еij�����
bytea ���������ݣ�"�ֽ�����"��
character varying [ (n) ]varchar [ (n) ] �䳤�ַ���
character [ (n) ] char [ (n) ] �����ַ���
cidr IPv4 ���� IPv6 �����ַ
circle ƽ���е�Բ
date �������ڣ��꣬�£��գ�
double precisionfloat8˫���ȸ�������
inet IPv4 ���� IPv6 �����ַ
integerint��int4���ֽڳ��з�������
interval [ (p) ]  ʱ����
line ƽ���е����޳�ֱ��
lseg ƽ���е��߶�
macaddr MAC ��ַ
money ���ҽ��
numeric [ (p, s) ]decimal [ (p, s) ]��ѡ���ȵ�׼ȷ����
path ƽ���еļ���·��
point ƽ���еĵ�
polygon ƽ���еķ�ռ���·��
realfloat4�����ȸ�����
smallintint2�з������ֽ�����
serialserial4�������ֽ�����
text �䳤�ַ���
time [ (p) ] [ without time zone ] һ�����ʱ��
time [ (p) ] with time zonetimetzһ�����ʱ�䣬����ʱ��
timestamp [ (p) ] [ without time zone ] ���ں�ʱ��
timestamp [ (p) ] with time zonetimestamptz���ں�ʱ��

������: �������ͣ���������ƴд�ģ���SQL�����ģ� bit��bit varying��boolean�� char��character��character varying��varchar��date�� double precision��integer�� interval��numeric��decimal�� real��smallint��time ��������ʱ������ʱ���ģ��� timestamp ��������ʱ������ʱ���ģ���

ÿ���������Ͷ���һ�������������������������ⲿ������ʽ�� ����ڽ������������Եĸ�ʽ���������������Ҫô�� PostgreSQL �����еģ����缸��·����Ҫô�������м��ֲ�ͬ�ĸ�ʽ���������ں�ʱ�����͡� ��Щ�������������Dz�����ġ�Ҳ����˵�������������������ԭʼ������Ƚϵ�ʱ����ܶ�ʧ���ȡ�

8.1. ��ֵ����

��ֵ������2��4��8�ֽڵ������Լ�4��8�ֽڵĸ������Ϳ�ѡ����С����ɡ� Table 8-2 �г������п������͡�

Table 8-2. ��ֵ����

�����洢�ռ�������Χ
smallint2 �ֽ�С��Χ����-32768 �� +32767
integer4 �ֽ����õ�����-2147483648 �� +2147483647
bigint8 �ֽ���Χ������-9223372036854775808 �� 9223372036854775807
decimal�䳤�û��������ȣ���ȷ������
numeric�䳤�û��������ȣ���ȷ������
real4 �ֽ��侫�ȣ�����ȷ6 λʮ�������־���
double precision8 �ֽ��侫�ȣ�����ȷ15 λʮ�������־���
serial4 �ֽ���������1 �� +2147483647
bigserial8 �ֽ���Χ����������1 �� 9223372036854775807

��ֵ���ͳ������﷨�� Section 4.1.2 �������� ��ֵ���Ͷ�Ӧ��һ����������ѧ�������ͺ����������Ϣ��ο� Chapter 9�� ����ļ�����ϸ������Щ���͡�

8.1.1. ��������

���� smallint��integer���� bigint �洢���ַ�Χ��ȫ�������ֵ�����Ҳ����û��С�����ֵ����֡� ��ͼ�洢������Χ�������ֵ������һ������

���õ������� integer����Ϊ���ṩ���ڷ�Χ���洢�ռ䣬 ������֮������ƽ�⡣һ��ֻ���ڴ��̿ռ���ŵ�ʱ���ʹ�� smallint����ֻ���� integer �ķ�Χ������ʱ���ʹ�� bigint����Ϊǰ�߾��Կ�öࡣ

bigint ���Ϳ��ܲ���������ƽ̨�϶���ת��ȷ�� ��Ϊ�������������԰��ֽ�������֧�֡�����Щû������֧�ֵĻ����ϣ� bigint �����ú� integer һ����������Ȼռ�ݰ��ֽڴ洢�������������ǻ���֪���κ��������������ƽ̨��

SQLֻ�������������� integer(��int)�� smallint������ bigint���������� int2��int4���� int8 ������չ�� Ҳ��������� SQL ���ݿ�ϵͳ��ʹ�á�

8.1.2. ���⾫����ֵ

���� numeric ���Դ洢���1000λ���ȵ����ֲ���׼ȷ�ؽ��м��㡣 �����ر��齫�����ڻ��ҽ�������Ҫ�����׼ȷ��������������numeric �����ϵ�����������������ͻ���������һ�������ĸ���������Ҫ���ܶࡣ

���������������ʹ����������� һ�� numeric �������ǵ�С�����ұ�ΪֹС�����ֵ�λ���� numeric ������������������ȫ������λ����Ŀ��Ҳ����С�������ߵ�������Ŀ�� ������� 23.5141 �ľ���Ϊ6������Ϊ4���������Ϊ�����ı���Ϊ�㡣

numeric �ֶε���󾫶Ⱥ����������ǿ������õġ�Ҫ����һ������Ϊ numeric ���ֶΣ��������������﷨

NUMERIC(precision, scale)

���ȱ���Ϊ��������������Ϊ����������� ���⣬

NUMERIC(precision)

ѡ���� 0 Ϊ�����������κξ��Ȼ��߱�������

NUMERIC

�򴴽�һ�����Դ洢һ��ֱ��ʵ�־������޵����⾫�Ⱥͱ�������ֵ�� һ���������͵��ֶν������������ֵת�����κ��ض��ı����� �����б��������� numeric �ֶν�������ֵת��Ϊ�ñ����� ��SQL��׼Ҫ��ȱʡ�ı����� 0��Ҳ����ת�����������ȡ� ���Ǿ����������е�û�á�����������ֲ�ԣ��������������ȷ�������Ⱥͱ�������

���һ��Ҫ�洢����ֵ�ı������ֶ������ı����ߣ� ��ôϵͳ������Բ������ֵ��ָ����С��λ�� Ȼ�����С������ߵ�����λ�������������ľ��ȼ�ȥ�����ı����� ��ô�׳�һ������

��ֵ����ֵ�������Dz����κ�ǰ�����ߺ�׺�����ʽ�洢�ġ� ��ˣ��ֶ��������ľ��Ⱥͱ����������ֵ�������ǹ̶�����ġ� ����������棬numeric ���͸������� varchar(n)�� ������ char(n)����

������ͨ������ֵ֮�⣬numeric ������������ֵ NaN�� ��ʾ"����һ������"���κ��� NaN ����IJ�������������һ�� NaN�� ����� SQL ���������Щֵ����һ������д�������������Χ���ϵ����ţ����� UPDATE table SET x = 'NaN'��������ʱ���ִ� NaN ������Сд�޹ؿ�����

���� decimal �� numeric �ǵ�Ч�ġ� �������Ͷ���SQL��׼��

8.1.3. ����������

�������� real �� double precision �Dz�׼ȷ�ģ��侫�ȵ��������͡� ʵ���ϣ���Щ������ IEEE ��׼ 754 �����Ƹ������������ֱ��Ӧ����˫���ȣ���һ��ʵ�֣� ����²㴦����������ϵͳ�ͱ�����������֧�֡�

��׼ȷ��ζ��һЩ��ֵ����׼ȷ��ת�����ڲ���ʽ�������Խ��Ƶ���ʽ�洢�ģ���˴洢Ȼ��������ٴ�ӡ����������ʾһЩȱʧ�� ������Щ�����Լ���Щ����������ڼ����д�����������ѧ�ͼ������ѧ��һ�������ķ�֧�� ���Dz����������һ������������������۽��������¼��㣺

  • �����Ҫ��׼ȷ�ļ��㣨���������ҽ���Ӧʹ�� numeric ���͡�

  • �����������Щ�����������κ���Ҫ�ĸ��Ӽ��㣬��������Щ��Է�Χ�����������磩�������������飬����Ӧ����ϸ��ڬ���ʵ�֡�

  • ������������ֵ��������ԱȽϿ�����Ҳ���ܲ�������������ת��

ͨ����real ���͵ķ�Χ������ -1E+37 �� +1E+37�� ���������� 6 λС����double precision ����ͨ���� -1E+308 �� +1E+308 �ķ�Χ������������ 15 λ���֡�̫�����̫С����ֵ���ᵼ�´��� �����������̫�ߣ���ô���ܷ���԰����̫�ӽ�������֣�����޷�����ֵ�ı�����ʽ�����־ͻ���������

������ͨ������ֵ֮�⣬�������ͻ��м�������ֵ��

Infinity
-Infinity
NaN

��Щֵ�ֱ��ʾ IEEE 754 ����ֵ"�������"��"�������"�� �Լ�"����һ������"�����ڲ���ѭ IEEE 754 ���������Ļ����ϣ���Щֵ�ĺ�����ܲ���Ԥ�ڵġ��� ����� SQL ���������Щ��ֵ��������д���������������Χ���ϵ����ţ� ������ UPDATE table SET x = 'Infinity'�� ����ʱ����Щֵ���Դ�Сд�޹صķ�ʽʶ��ġ�

PostgreSQL ��֧�� SQL ��׼��ʾ�� float �� float(p) ���������Ǿ�ȷ����ֵ���͡� �����p �����Զ�����λ��ʾ����Ϳɽ��ܾ��ȡ� ��ѡȡ real ���͵�ʱ��PostgreSQL ���� float(1) �� float(24)����ѡȡ double precision ��ʱ�򣬽��� float(25) �� float(53)��������Χ֮��� p ֵ������һ������ û���������ȵ� float ���������� double precision��

ע��: �� PostgreSQL 7.4 ��ǰ���� float(p) ����ľ��Ȼᱻ��������ô��λ����ʮ����λ���� 7.4 �Ѿ����޸ij��� SQL ��׼ƥ�䣬��׼��������������Զ�����λ�����ġ����� real �� double precision �ֱ��� 24 �� 53 ��������λ��λ���� IEEE ��׼�ĸ���ʵ����˵����ȷ�ġ� �ڷ� IEEE ƽ̨�ϣ������ֵ��������ƫ�����Ϊ�˼򻯣�����������ƽ̨�϶�����ͬ���� p ֵ��Χ��

8.1.4. Serial����ţ�����

serial �� bigserial ���Ͳ������������ͣ� ֻ��Ϊ�ڱ�������Ψһ��ʶ���ĸ����ϵı���������������һЩ���ݿ��е� AUTO_INCREMENT ���ԣ��� ��Ŀǰ��ʵ���У�����һ�仰��

CREATE TABLE tablename (
	colname SERIAL
);

�ȼ����������漸�仰��

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename(
	colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);

��ˣ����Ǿʹ�����һ�������ֶβ��Ұ�����ȱʡ��ֵ����Ϊ��һ�����з�����ȡֵ�� Ӧ����һ�� NOT NULL Լ����ȷ����ֵ���ᱻ��ȷ�ز��롣 �ڴ�������������ܻ�ϣ������һ�� UNIQUE ���� PRIMARY KEY Լ����������ز����ظ�����ֵ������������Զ������ġ�

ע��: �� PostgreSQL 7.3 ��ǰ��serial ���� UNIQUE�������ڲ�����ˡ� �����ϣ��һ�������ֶ���һ��ΨһԼ������һ����������ô�����ڱ�������������������������һ����

Ҫʹ�� serial �ֶβ������е���һ����ֵ�����У� ��Ҫ��Ҫע�� serial Ӧ�ø���ȱʡֵ�� ���ǿ���ͨ���� INSERT ����аѸ��ֶ��ų����ֶ��б�֮����ʵ�֣� Ҳ����ͨ��ʹ�� DEFAULT �ؼ�����ʵ�֡�

������ serial �� serial4 �ǵ�Ч�ģ� ���������� integer �ֶΡ������� bigserial �� serial8 Ҳһ����ֻ����������һ�� bigint �ֶΡ� �����Ԥ���ڱ����������ʹ�õı�ʶ��Ŀ���� 231 ������ô��Ӧ��ʹ�� bigserial��

һ�� serial ���ʹ������������������ֶα�ɾ����ʱ���Զ�ɾ��������������Dz��ᱻɾ���ġ� ����һ���� PostgreSQL �汾 7.3 ֮ǰ�ɲ�����ġ���ע�⣬�����Զ�ɾ���Ĺ�����ͨ������ 7.3 ��ǰ�����ݿ�ת����ʱ��ɲ����Զ������� ������ת���ļ���������Ҫ�������ֹ�����ϵ����Ϣ���� ���⣬���������к��ֶ�֮���������ֻ�� serial �ֶα������У� ����κ������ֶ����������У��������ֹ����� nextval �������� ��ô�����������б�ɾ���ˣ����Ǿͻᱻ�ƻ���������Ϊ����ʹ�� serial �ֶ���һ�ֲ��õ���ʽ�����������ͬһ�����з������������ֶ�ι���ݣ���ô���ǰ����з�������Ϊ�������󴴽���