将列的数据类型更改为串行 postgresql

Kam*_*ge 6 postgresql

我如何串行更改表列。这个专栏已经有数据了,我不想丢失它们..我试过这个:

ALTER TABLE tbl_user ADD COLUMN usr_id SERIAL PRIMARY KEY;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

错误:关系“tbl_user”的列“usr_id”已经存在********** Erreur ************

我也试过这个:

UPDATE tbl_user SET usr_id = nextval('seq_user') WHERE usr_id IS NULL;

查询成功返回:0 行受影响,71 毫秒执行时间。

查询成功但不更改列类型

Clo*_*eto 5

serial是一个伪类型。它确实是一个整数,所以你已经有了它的一半。缺少的是将序列分配为默认值:

alter table tbl_user 
alter column usr_id set default nextval('seq_user')
Run Code Online (Sandbox Code Playgroud)

但在此之前需要找到 的最大值usr_id并将其设置为最小序列值+1:

select max(usr_id) from tbl_user;

alter sequence seq_user minvalue 1001
Run Code Online (Sandbox Code Playgroud)