您可以在Postgres中已存在的列上创建序列吗?

时间:2014-09-22 11:07:57

标签: postgresql sequence

我有一个表linelevelpmts,其中列seq(Int4)将用作序列。

我知道我可以删除该列并将其重新创建为类型序列,但是我可以修改现有列以用作序列。

ALTER TABLE "public"."linelevelpmts" ALTER COLUMN "seq" SET DEFAULT nextval('linelevelpmts_seq_seq'::regclass);

此代码生成错误:Relation linelevelpmts_seq_seq不存在。

1 个答案:

答案 0 :(得分:11)

  

此代码生成错误:Relation linelevelpmts_seq_seq不存在。

您需要先创建要用作默认值的序列:

create sequence linelevelpmts_seq_seq;
ALTER TABLE public.linelevelpmts 
    ALTER COLUMN seq SET DEFAULT nextval('linelevelpmts_seq_seq'::regclass);

如果您想要像创建serial一样的效果,还需要更改序列的“所有者”:

alter sequence linelevelpmts_seq_seq owned by linelevelpmts.seq;

修改

Igor的评论很好:如果你已经在seq列中有值,你应该调整序列的起始值:

select setval('linelevelpmts_seq_seq', (select max(seq) from linelevelpmts));