Postgresql 删除表时保留从BIGSERIAL创建的序列

Postgresql 删除表时保留从BIGSERIAL创建的序列,postgresql,sequence,auto-increment,postgresql-9.2,Postgresql,Sequence,Auto Increment,Postgresql 9.2,我使用以下SQL创建了一个postgres表: CREATE TABLE mytable ( mytable_id BIGSERIAL NOT NULL, mytable_char VARCHAR(8) NOT NULL ) 这将创建表以及隐式的mytable\u mytable\u id\u seq序列 现在,在创建了1.000.000条记录之后,我想将这个表拆分为分区表(使用继承)。因为链接引用了其他表中的主表,所以我希望在新的子表中继续使用原始表中的ID,并继续使用序列

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

CREATE TABLE mytable (
    mytable_id BIGSERIAL NOT NULL,
    mytable_char VARCHAR(8) NOT NULL
)
这将创建表以及隐式的
mytable\u mytable\u id\u seq
序列

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


但是,如果我删除表mytable,它也会删除序列。删除表时如何保持序列?

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

alter sequence mytable_mytable_id_seq owned by none;
create sequence part_seq;
select setval('part_seq', (select nextval('mytable_mytable_id_seq'), false);
如果现在删除表,则不会删除序列

详情请参阅手册:

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

alter sequence mytable_mytable_id_seq owned by none;
create sequence part_seq;
select setval('part_seq', (select nextval('mytable_mytable_id_seq'), false);

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

alter sequence mytable_mytable_id_seq owned by none;
create sequence part_seq;
select setval('part_seq', (select nextval('mytable_mytable_id_seq'), false);
如果现在删除表,则不会删除序列

详情请参阅手册:

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

alter sequence mytable_mytable_id_seq owned by none;
create sequence part_seq;
select setval('part_seq', (select nextval('mytable_mytable_id_seq'), false);