PostgreSQL:不指定数字精度的优缺点

时间:2018-09-14 17:41:42

标签: sql postgresql database-design

在PostgreSQL 10中,我正在创建一个包含数字列的表。我知道此列中的值必须精确,但是我不确定最终值的确切大小。

value NUMERIC

vs。

value NUMERIC(20, 2)

不指定精度而不是给任意大的精度有什么优点或缺点?

2 个答案:

答案 0 :(得分:4)

指定精度会对您的数据产生两个影响:

  1. 舍入值:

    SELECT 100.005::NUMERIC(20,2) -- 100.01

  2. 如果您的值太大,则会引发错误:

    SELECT 100.005::NUMERIC(3,2) -- ERROR: numeric field overflow

就最佳做法而言-我认为这取决于您数据的性质。通常,显式总是比隐式好。

答案 1 :(得分:1)

数字所需的磁盘大小受其大小限制。如果未指定小数位数,则限制为最大可能的小数位数,即16383

大小计算为follow

  

数值实际存储时没有任何额外的前导或   尾随零。因此,列的声明精度和小数位数   是最大值,不是固定分配。 [...]实际存储   每组四个十进制数字的要求是两个字节,再加上   三到八个字节的开销。

因此,如果您输入的值具有固定格式,则使用任意大的精度或完全不使用小数位将没有任何区别。但是,如果使用“无限”的小数位数或无意义的小数位数来获得值,则不使用小数位将需要更多磁盘空间。