2017-02-22 47 views
0

如何以串行方式更改表列。這列已經在數據單項它,我不想失去他們.. 我已經試過這樣:將列的數據類型更改爲串行postgresql

ALTER TABLE tbl_user ADD COLUMN usr_id SERIAL PRIMARY KEY; 

我得到這個錯誤

ERROR: column "usr_id" of relation "tbl_user" already exists ********** Erreur **********

我想這也:

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

Query returned successfully: 0 rows affected, 71 msec execution time.

查詢轉succesfull但不改變列類型

+0

另請參見[將'serial'添加到Postgres中的現有列](http://stackoverflow.com/questions/9490014/adding-serial-to-existing-column-in-postgres)和[更多](http: //stackoverflow.com/search?q=%5Bpostgresql%5D+alter+serial)... – pozs

+0

感謝您的幫助 – Kamfasage

+1

一個非常相似的問題在[http://stackoverflow.com/ques tions/12591207 /如何將整數轉換爲序列](http://stackoverflow.com/questions/12591207/how-to-convert-integer-to-serial) - 會有幫助嗎? –

回答

0

serial是一個僞類型。它確實是一個整數,所以你已經有一半了。現在缺少的是對序列分配爲默認值:

alter table tbl_user 
alter column usr_id set default nextval('seq_user') 

但在此之前,有必要找到usr_id最大的價值,並將其設置爲最小序列值+ 1:

select max(usr_id) from tbl_user; 

alter sequence seq_user minvalue 1001 
相關問題