删除表时,保持从BIGSERIAL创建序列

时间:2015-01-27 13:47:26

标签: postgresql sequence auto-increment postgresql-9.2

我有一个使用以下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,它也会删除序列。丢弃桌子时如何保留序列?

1 个答案:

答案 0 :(得分:5)

您需要先删除列与序列之间的关联:

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);