我有一張現有數據表。有沒有辦法添加主鍵而不刪除並重新創建表?如何在PostgreSQL中將自動遞增主鍵添加到現有表中?
回答
(更新 - 感謝誰評論人)
的PostgreSQL
的現代版本假設你有一個名爲test1
到要添加一個自動遞增的表,主鍵id
(代理)欄。下面的命令應該在最新版本的PostgreSQL的足夠:在PostgreSQL
的
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
舊版本(到8.x前?),你必須做所有的髒活舊版本的PostgreSQL。下面的命令序列應該可以做到這一點:
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
同樣,在Postgres的最新版本中,這大致等同於上面的單個命令。
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
這是所有你需要:
- 添加
id
列 - 用序列填充它從1到COUNT(*)。
- 將其設置爲主鍵/不爲空。
感謝評論中給出了這個答案的@resnyanskiy。
這應該被標記爲答案,答案應該屬於@resnyanskiy – 2016-05-16 09:50:50
我在這裏降落是因爲我也在尋找類似的東西。在我的情況下,我將一組具有許多列的登臺表中的數據複製到一個表中,同時將行ID分配給目標表。這是我使用的上述方法的一個變體。 我在目標表的末尾添加了串行列。這樣我就不必在Insert語句中有一個佔位符了。然後一個簡單的選擇*到目標表中自動填充此列。以下是我在PostgreSQL 9.6.4上使用的兩條SQL語句。
ALTER TABLE target ADD COLUMN some_column SERIAL;
INSERT INTO target SELECT * from source;
要在V10使用標識列,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
身份列的說明,請參閱https://blog.2ndquadrant.com/postgresql-10-identity-columns/。
有關GENERATED BY DEFAULT和GENERATED ALWAYS之間的差異,請參見https://www.cybertec-postgresql.com/en/sequences-gains-and-pitfalls/。
要更改序列,請參閱https://popsql.io/learn-sql/postgresql/how-to-alter-sequence-in-postgresql/。
這個解決方案的問題是如果表已經包含行,那麼你會得到一個錯誤:SQL錯誤[23502]:錯誤:列「id」包含空值「 – isapir 2018-03-07 16:30:07
- 1. 現有表中添加自動遞增的主鍵 - SQL
- 2. SQL Server將自動增加主鍵添加到現有表
- 3. 如何將代理自動增加鍵添加到表中?
- 4. 將主鍵添加到現有表
- 5. 將主鍵添加到現有表
- 6. 將自動增量列添加到現有的紅移表中
- 7. 如何將外鍵鏈接到Oracle中自動遞增的主鍵?
- 8. 從其他表的自動遞增主鍵的列向表中添加數據
- 9. 將自動增量主鍵插入到外鍵表中
- 10. 如何將自動增量添加到mongodb/node.js中的現有集合中?
- 11. 將主鍵列添加到現有的mysqli數據庫表中
- 12. 加入恆等式(自動遞增),以現有的表的主鍵
- 13. 插入自動增量主鍵到現有表
- 14. oracle自動增加到主鍵
- 15. 如何將外鍵添加到現有的SQLite表中?
- 16. 將自動增量主鍵添加到使用SELECT語句創建的表格
- 17. 如何根據列的順序添加自動增量主鍵?
- 18. 如何將具有自動增量名稱的列添加到MySql表中?
- 19. 如何增加「主鍵」自動增加數量?
- 20. 如何將新列添加到現有的複合主鍵
- 21. 將外鍵添加到現有表
- 22. SQL將外鍵添加到現有表
- 23. 如何在數組中添加自動遞增數字?
- 24. 使用saveToCassandra時自動遞增主鍵()
- 25. mysql自動遞增主鍵耗盡
- 26. 向表添加行 - 主鍵/自動增量錯誤(System.Data.SQLite)
- 27. 當在MySQL中添加一列時,有一列等於[自動增量]主鍵
- 28. 如何將新主機添加到kubernetes中的現有Ingress中?
- 29. 無法主鍵/唯一鍵/自動遞增加入此列
- 30. PostgreSQL沒有自動遞增功能?
UPDATE test1 SET id = DEFAULT;也適用。 – 2010-05-31 15:57:39
我使用的是ORACLE,所以分享它可能對ORACLE傢伙有用在ORACLE中:ALTER TABLE TEST1 ADD ID NUMBER; UPDATE TEST1 SET ID = TEST1_SEQ.NEXTVAL; ALTER TABLE TEST1添加主鍵(ID);在執行UPDATE語句之前創建一個序列TEST1_SEQ – msbyuva 2011-06-22 20:19:02
請注意,'ADD PRIMARY KEY'也會按照預期和想要創建'NOT NULL'約束(在postgres 9.3中進行測試)。 – 2014-02-07 20:36:53