【问题标题】:Postgres Sequence Value Not Incrementing After Inserting RecordsPostgres序列值在插入记录后不增加
【发布时间】:2021-02-19 00:54:26
【问题描述】:

我有下表:

DROP TABLE IF EXISTS TBL_CACL;
CREATE TABLE TBL_CACL (
   ID INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
   NAME VARCHAR(250)  UNIQUE NOT NULL
);

我可以像这样查询 postgres:

SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';

确定表上序列的默认名称是tbl_cacl_id_seq

然后我可以像这样读取它的 nextVal:

SELECT nextval('tbl_cacl_id_seq');

在创建表后直接值为'1'

但是,如果我像这样插入几行数据:

INSERT INTO TBL_CACL
VALUES
(1, 'CACL_123'),
(2, 'CACL_234'),
(3, 'CACL_345');

我读取了表格的 nextVal,它返回 '2'

我原以为 tbl_cacl_id_seq 会是“4”。显然我误解了插入与 nextVal 的关系。为什么序列与插入不同步,如何按顺序获取它们?感谢您的建议。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    tbl_cacl_id_seq 仅在调用函数 nextval('tbl_cacl_id_seq') 时才会递增。由于您在插入期间为 ID 列提供了值,因此不会发生此函数调用(因此无需获取默认值)。

    【讨论】:

    • 没错。如果你使用GENERATED ALWAYS AS IDENTITY,就会很清楚发生了什么。
    • 太棒了!我现在明白了。谢谢!
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多