【问题标题】:Sequence does not reset after truncating the table截断表后序列不会重置
【发布时间】:2012-12-21 11:24:12
【问题描述】:

我在截断表后使用 SELECT lastval() 获取错误的序列号。

当我截断表时,我使用 SELECT lastval(),我得到了错误的 ID/

【问题讨论】:

    标签: postgresql sequence


    【解决方案1】:

    使用TRUNCATE SQL 命令。

    对于单个表,语法如下:

    TRUNCATE TABLE table_name RESTART IDENTITY;
    

    对于多个表:

    TRUNCATE TABLE table_foo, table_bar RESTART IDENTITY;
    

    它的作用:

    自动重新启动截断表的列所拥有的序列。

    详情请看:TRUNCATE @ postgresql.org

    【讨论】:

    • 错误:“RESTART”第 1 行或附近的语法错误:截断表产品 RESTART IDENTITY;
    • @user1369887 你有什么版本的PostgreSQL?
    • 我的服务器版本是:服务器 8.3.16
    • 类似的事情发生在版本 8.4.9 上。以下语句不会重置序列值:TRUNCATE TABLE my_table RESTART IDENTITY;
    • @Wojtas 仔细阅读答案。它已经声明,它只会重置截断表的列所拥有的序列
    【解决方案2】:

    重置序列以从数字 1 开始的最佳方法是在成功截断序列后执行以下操作:

    ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
    

    因此,例如对于 users 表,它将是:

    ALTER SEQUENCE users_id_seq RESTART WITH 1
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    • 帮助。谢谢你:)
    【解决方案3】:

    以下是重置序列的标准方法:

    truncate table table_name restart identity;
    

    但在某些版本和平台中,这是语法错误,

    在这种情况下,你可以在不重置序列的情况下截断,并用另一个 sql 改变序列,试试这个:

    truncate table table_name;
    alter sequence seq_name start 1;
    

    【讨论】:

      【解决方案4】:

      试试这个:

      TRUNCATE TABLE table_name RESTART IDENTITY CASCADE;

      【讨论】:

      • 除非你知道它的作用并且你确定那是你想做的,否则不要级联
      【解决方案5】:

      检查下一个

      ALTER SEQUENCE sequence_name RESTART WITH 1;
      

      【讨论】:

        【解决方案6】:

        如果你想重置序列,那么:

        setval('sequence_name', 0)
        

        要列出现有的序列名称,请在 psql 提示符处发出 \ds

        【讨论】:

        • 请注意,对于字段序列的编程识别,有函数 pg_get_serial_sequence。 select pg_get_serial_sequence('tablename','colname');
        • 错误的ID表示,不是实际生成的ID值。
        猜你喜欢
        • 1970-01-01
        • 2012-06-02
        • 2012-03-18
        • 2020-05-12
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多