PostgreSQL创建序列时大整数传递及超出范围问题解决
解决PostgreSQL序列大整数范围问题
这个错误的核心原因是你指定的MAXVALUE超出了PostgreSQL默认序列类型bigint的取值范围。PostgreSQL的bigint最大只能到9223372036854775807,而你写的9999999999999999999999999999远远超过了这个上限,所以触发了范围错误。
Oracle的序列默认使用NUMBER类型,天生支持超大数值范围,但PostgreSQL的序列默认是bigint,如果需要支持更大的数值,你需要显式指定序列的数据类型为NUMERIC(和Oracle的NUMBER是等价类型)。
正确的创建语句
CREATE SEQUENCE seq_id AS NUMERIC MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NO CYCLE;
额外说明
- 使用
NUMERIC类型的序列虽然能支持超大数值,但运算性能会比bigint略低一些。如果你的业务场景不需要这么极端的最大值,其实可以直接使用bigint的上限值9223372036854775807,这样既能满足大部分需求,又能保持更好的性能。 - 如果你省略
MAXVALUE参数,PostgreSQL会自动设置为对应类型的最大值(NUMERIC的话就是极大的数值,基本能覆盖你需要的范围)。
内容的提问来源于stack exchange,提问作者Prajna
相关产品推荐
相关产品推荐

