表1列出了所有的可用类型。数字操作符和相关的内置函数请参见数字操作函数和操作符。
表 1 整数类型
示例:
``` --创建具有TINYINT类型数据的表。 postgres=# CREATE TABLE int_type_t1 ( IT_COL1 TINYINT );
--创建具有TINYINT类型数据的表。 postgres=# INSERT INTO int_type_t1 VALUES(10);
--查看数据。 postgres=# SELECT * FROM int_type_t1; it_col1
10 (1 row)
--删除表。 postgres=# DROP TABLE int_type_t1;
```
``` --创建具有TINYINT,INTEGER,BIGINT类型数据的表。 postgres=# CREATE TABLE int_type_t2 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT );
--插入数据。 postgres=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);
--查看数据。
postgres=# SELECT * FROM int_type_t2;
a | b | c | d
-----+----+------+-------
100 | 10 | 1000 | 10000
(1 row)
--删除表。 postgres=# DROP TABLE int_type_t2; ```
说明:
- TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。
- 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。
表 2 任意精度型
示例:
``` --创建表。 postgres=# CREATE TABLE decimal_type_t1 ( DT_COL1 DECIMAL(10,4) );
--插入数据。 postgres=# INSERT INTO decimal_type_t1 VALUES(123456.122331);
--查询表中的数据。 postgres=# SELECT * FROM decimal_type_t1; dt_col1
123456.1223 (1 row)
--删除表。 postgres=# DROP TABLE decimal_type_t1; ```
``` --创建表。 postgres=# CREATE TABLE numeric_type_t1 ( NT_COL1 NUMERIC(10,4) );
--插入数据。 postgres=# INSERT INTO numeric_type_t1 VALUES(123456.12354);
--查询表中的数据。 postgres=# SELECT * FROM numeric_type_t1; nt_col1
123456.1235 (1 row)
--删除表。 postgres=# DROP TABLE numeric_type_t1; ```
说明:
- 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示最大范围时,再选用任意精度类型。
- 使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。
表 3 序列整型
示例:
``` --创建表。 postgres=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL);
--插入数据。 postgres=# INSERT INTO smallserial_type_tab VALUES(default);
--再次插入数据。 postgres=# INSERT INTO smallserial_type_tab VALUES(default);
--查看数据。
postgres=# SELECT * FROM smallserial_type_tab;
a
1 2 (2 rows)
--创建表。 postgres=# CREATE TABLE serial_type_tab(b SERIAL);
--插入数据。 postgres=# INSERT INTO serial_type_tab VALUES(default);
--再次插入数据。 postgres=# INSERT INTO serial_type_tab VALUES(default);
--查看数据。 postgres=# SELECT * FROM serial_type_tab; b
1 2 (2 rows)
--创建表。 postgres=# CREATE TABLE bigserial_type_tab(c BIGSERIAL);
--插入数据。 postgres=# INSERT INTO bigserial_type_tab VALUES(default);
--插入数据。 postgres=# INSERT INTO bigserial_type_tab VALUES(default);
--查看数据。 postgres=# SELECT * FROM bigserial_type_tab; c
1 2 (2 rows)
--删除表。 postgres=# DROP TABLE smallserial_type_tab;
postgres=# DROP TABLE serial_type_tab;
postgres=# DROP TABLE bigserial_type_tab; ```
说明:
SMALLSERIAL,SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。
表 4 浮点类型
根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 |
|||
示例:
``` --创建表。 postgres=# CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3) );
--插入数据。 postgres=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654);
--查看数据。 postgres=# SELECT * FROM float_type_t2 ; ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7 ---------+---------+-------------+---------+---------+----------+--------- 10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124 (1 row)
--删除表。 postgres=# DROP TABLE float_type_t2; ```