You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:57:48