PostgreSQL中如何仅为numeric类型指定scale参数?
结论
PostgreSQL原生的NUMERIC类型声明语法不支持仅指定scale参数而省略precision参数,但有两种常用方案可以实现「保留默认无上限精度、同时固定小数位数」的需求:
- 方案1:使用允许的最大显式精度1000
官方文档明确显式指定的precision最大支持1000,绝大多数业务场景下这个上限已经远大于实际可能用到的整数位长度,你可以直接按如下格式声明:
比如要固定2位小数,就写NUMERIC(1000, 你需要的scale值)NUMERIC(1000, 2),完全可以满足绝大多数场景下「精度接近无限制、小数位固定」的需求。 - 方案2:使用CHECK约束(支持完全无上限的默认精度)
如果你确实需要使用默认的无上限精度(支持超过1000位的总长度),可以通过CHECK约束限制小数位数:- 建表时直接给字段加约束:
CREATE TABLE your_table ( column_name NUMERIC CHECK (scale(column_name) = 你需要的scale值) );- 如果需要多处复用这个类型,可以创建自定义域:
-- 先创建自定义域,比如固定2位小数的numeric类型 CREATE DOMAIN numeric_scale_2 AS NUMERIC CHECK (scale(VALUE) = 2); -- 建表时直接使用自定义域 CREATE TABLE your_table ( amount numeric_scale_2 );
内容的提问来源于stack exchange,提问作者Vladyslav Kalashnikov
相关产品推荐
相关产品推荐

