PostgreSQL支持的数字类型有整数类型、用户指定精度类型、浮点类型、serial类型。

PostgreSQL支持的数字类型如表所示

smallint、integer、bigint都是整数类型,存储一定范围的整数,超出范围将会报错。smallint存储2字节整数,字段定义时可写成int2, integer存储4字节整数,支持的数值范围比smallint大,字段定义时可写成int4,是最常用的整数类型,bigint存储8字节整数,支持的数值范围比integer大,字段定义时可写成int8。对于大多数使用整数类型的场景使用integer就够了,除非integer范围不够用的情况下才使用bigint。定义一张使用integer类型的表如下所示:

 mydb=> CREATE TABLE test_integer (id1 integer, id2 int4) ;
 CREATE TABLE

 decimal和numeric是等效的,可以存储指定精度的多位数据,比如带小数位的数据,适用于要求计算准确的数值运算,声明numeric的语法如下所示:

NUMERIC(precision, scale)

precision是指numeric数字里的全部位数,scale是指小数部分的数字位数,例如18.222的precision为5,而scale为3; precision必须为正整数,scale可以是0或整数,由于numeric类型上的算术运算相比整数类型性能低,因此,如果两种数据类型都能满足业务需求,从性能上考虑不建议使用numeric数据类型。real和double precision是指浮点数据类型,real支持4字节,double precision支持8字节,浮点数据类型在实际生产案例的使用相比整数类型会少些。smallserial、serial和bigserial类型是指自增serial类型,严格意义上不能称之为一种数据类型,如下代码创建一张测试表,定义test_serial表的id字段为serial类型:

 mydb=> CREATE TABLE test_serial (id serial, flag text);
 CREATE TABLE

查看表test_serial的表结构,如下所示:

 mydb=> \d test_serial
                               Table "pguser.test_serial"
Column |  Type   | Collation | Nullable |                 Default
-----------+---------+-----------+----------+-------------------------------------
id     | integer |           | not null | nextval('test_serial_id_seq'::regclass)
            flag   | text    |           |          |

以上显示id字段使用了序列test_serial_id_seq,插入表数据时可以不指定serial字段名称,将自动使用序列值填充,如下所示:

mydb=> INSERT INTO test_serial(flag) VALUES ('a');
INSERT 0 1
mydb=> INSERT INTO test_serial(flag) VALUES ('b');
INSERT 0 1
mydb=> INSERT INTO test_serial(flag) VALUES ('c');
INSERT 0 1
mydb=> SELECT * FROM test_serial;
     id | flag
-------+------
     1 | a
     2 | b
     3 | c
  (3 rows)

PostgreSQL支持数字类型操作符和丰富的数学函数,例如支持加、减、乘、除、模取余操作符,如下所示:

        mydb=> SELECT 1+2,2*3,4/2,8%3;
            ?column? | ? column? | ? column? | ? column?
        -------------+----------+----------+----------
                    3 |        6 |        2 |        2

按模取余如下所示:

        mydb=> SELECT mod(8,3);
          mod
        -----
          2
        (1 row)

四舍五入函数如下所示:

        mydb=> SELECT round(10.2), round(10.9);
            round | round
        ----------+-------
                10 |    11
        (1 row)

返回大于或等于给出参数的最小整数,如下所示:

        mydb=> SELECT ceil(3.6), ceil(-3.6);
            ceil | ceil
        ---------+------
                4 |   -3
        (1 row)

返回小于或等于给出参数的最大整数,如下所示:

        mydb=> SELECT floor(3.6), floor(-3.6);
            floor | floor
        ----------+-------
                3 |    -4
        (1 row)

参考手册https://www.postgresql.org/docs/10/static/datatype.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐