【问题标题】:Keep sequence created from BIGSERIAL when deleting table删除表时保留从 BIGSERIAL 创建的序列
【发布时间】:2015-03-26 03:50:12
【问题描述】:

我有一个使用以下 SQL 创建的 postgres 表:

CREATE TABLE mytable (
    mytable_id BIGSERIAL NOT NULL,
    mytable_char VARCHAR(8) NOT NULL
)

这将创建表以及隐式mytable_mytable_id_seq 序列。

现在,在创建 1.000.000 条记录后,我想将此表拆分为分区表(使用继承)。因为我从其他表链接引用主表,所以我想在新的子表中继续使用原始表中的 ID 并继续使用序列。

但是,如果我这样做 DROP TABLE mytable 它也会删除序列。删除表时如何保持顺序?

【问题讨论】:

    标签: postgresql sequence auto-increment postgresql-9.2


    【解决方案1】:

    需要先去掉列和序列的关联:

    alter sequence mytable_mytable_id_seq owned by none;
    

    如果现在删除表,则不会删除序列。

    详情在手册中:http://www.postgresql.org/docs/current/static/sql-altersequence.html

    另一种方法是创建一个新序列并将其设置为现有序列的值:

    create sequence part_seq;
    select setval('part_seq', (select nextval('mytable_mytable_id_seq'), false);
    

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多