2017-05-15 35 views
0

我嘗試從舊的PostgreSQL(9.3)將數據庫從Bucardo遷移到新的PostgreSQL(9.5,9.6)。如何正確添加Liquibase的databasechangelog(PostgreSQL)的主鍵?

Bucardo用於遷移的主鍵。

我有許多數據庫與public.databasechangelog沒有主鍵。 如何正確添加用於Liquibase的databasechangelog(PostgreSQL)的主鍵?

更新回答: 我可以通過SQL添加主鍵,但可能是Liquibase有添加主鍵的XML設置?

通過SQL安全地將主鍵添加到public.databasechangelog?

+0

https://www.postgresql.org/docs/current/static/sql-altertable .html –

+0

Liquibase [有意不使用主鍵](https://liquibase.jira.com/browse/CORE-1909)。但邊緣案例(在bug中提到)似乎並不適用於PostgreSQL(只要您沒有**真正的**大遷移ID - 即大於1GB)。 – pozs

+1

@pozs:'id'限制爲255個字符。最大總數這三列的大小是765個字符 - 現代DBMS應該能夠索引的東西。 PK的不存在確實是由某些DBMS的限制造成的:http://forum.liquibase.org/topic/why-does-databasechangelog-not-have-a-primary-key(Liquibase的舊版本實際上在該表上有一個主鍵) –

回答

0

Liquibase開發人員決定刪除該表上的主鍵,因爲顯然由於限制索引條目的最大大小,某些DBMS在這三列上創建索引時出現問題。

參見例如討論:http://forum.liquibase.org/topic/why-does-databasechangelog-not-have-a-primary-key

Postgres的是不受這些限制,所以你應該罰款只是增加一個:

alter table databasechangelog add primary key (id, author, filename); 
+0

謝謝! 我可以使用代碼: > DROP SEQUENCE IF EXISTS「changelog_seq」CASCADE; > CREATE SEQUENCE「changelog_seq」START 1; > ALTER TABLE databasechangelog ADD COLUMN synthetic_id BIGINT PRIMARY KEY DEFAULT nextval('changelog_seq'); –

+0

謝謝!我可以使用代碼嗎? DROP SEQUENCE IF EXISTS「changelog_seq」CASCADE; CREATE SEQUENCE「changelog_seq」START 1; ALTER TABLE databasechangelog ADD COLUMN synthetic_id BIGINT PRIMARY KEY DEFAULT nextval('changelog_seq'); –

+0

謝謝!我可以使用代碼嗎? <! - language:lang-sql - > DROP SEQUENCE IF EXISTS「changelog_seq」CASCADE; CREATE SEQUENCE「changelog_seq」START 1; ALTER TABLE databasechangelog ADD COLUMN synthetic_id BIGINT PRIMARY KEY DEFAULT nextval('changelog_seq'); <! - language:lang-sql - > –