我有一个表linelevelpmts
,其中列seq
(Int4)将用作序列。
我知道我可以删除该列并将其重新创建为类型序列,但是我可以修改现有列以用作序列。
ALTER TABLE "public"."linelevelpmts" ALTER COLUMN "seq" SET DEFAULT nextval('linelevelpmts_seq_seq'::regclass);
此代码生成错误:Relation linelevelpmts_seq_seq不存在。
答案 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));