PostgreSQL中的数据类型主要包括整形、浮点型、序列类型以及任意精度的数值

整数类型

整数类型包括:

  1. smallint, 2个字节,对应Java中的short,声明可以使用int2
  2. integer,4个字节,对应Java中的int,声明可以使用int4
  3. bigint,8个字节,对应Java中的long,声明可以使用int8

浮点数类型

浮点数类型包括:

  1. real,4个字节,对应Java中的float,创建表时可以用realfloat4来进行声明
  2. double precision,8个字节,对应Java中的double,创建表格时可以用double precision, float8来声明

注意: PG支持SQL标准的float(p)声明方法。但是,声明float(1)float(24)时,PG实际使用的是real类型,float(25)~float(53)时,PG实际使用的是double precision类型。

序列类型

序列数据类型用于实现类似MySQL中的auto_increment,PG中的序列类型包括:

  1. smallserial, 2个字节
  2. serial,4个字节
  3. bigserial,8个字节

关于serial数据类型,本质上是定义了一个序列(sequence),例如,

1
2
3
4
create table test (
    id serial primary key,
    ....
)

这个表test在创建时候,会创建一个sequence用于生成id字段的值。

任意精度的数值类型

任意精度的数据类型包含两个数据类型:decimalnumeric。这两个数据类型实际上是一样的。假设有一个如下声明:

1
numeric(5,3)

那么,他表示的含义为:这个数总共可以标识5位,小数点前有2位,小数点后有3位,即可以存储xx.xxx形式的数值(其范围为$[-99.999, 99.999]$)。

如果不声明精度的话(即直接声明为numeric),则可以存储小数点前最多131072位,小数点后最多16383位的数。

实际使用时的若干考虑

世纪存储的时候有几个考虑:

  1. 使用序列时直接使用bigserial类型。这是因为,当表数量小的时候,其带来的性能影响几乎可以忽略不计,但是,如果伴随业务的增长,数据一直增长,终究可能会使用bigserial类型,这样,不如直接使用bigserial
  2. 对于其他数据类型,除了非常确定一个字段是确定的数据类型的情况下,不如直接使用numeric来声明。

对于数据类型生用可以参考[1][1].

参考

[1]: https://www.youtube.com/watch?v=wzKWMF-kWGc&list=WL&index=35&t=881s Postgresql中的高级数据类型