如何正确地为Liquibase添加主键到databasechangelog(PostgreSQL)?

时间:2017-05-15 08:31:05

标签: postgresql liquibase bucardo

我尝试将数据库从旧的PostgreSQL(9.3)迁移到Bucardo的新PostgreSQL(9.5,9.6)。

Bucardo使用主键进行迁移。

我有很多数据库,其中public.databasechangelog没有主键。 如何正确地为Liquibase添加主键到databasechangelog(PostgreSQL)?

更新答案: 我可以通过SQL添加主键,但可能是Liquibase已经设置了XML中添加的主键吗?

通过SQL安全地将主键添加到public.databasechangelog?

2 个答案:

答案 0 :(得分:1)

我在开头用主键创建了 DATABASECHANGELOG 表。这可能不是正确的方法,但会有所帮助

CREATE TABLE "DATABASECHANGELOG" (
  "ID" varchar(255) NOT NULL,
  "AUTHOR" varchar(255) NOT NULL,
  "FILENAME" varchar(255) NOT NULL,
  "DATEEXECUTED" datetime NOT NULL,
  "ORDEREXECUTED" varchar(10) NOT NULL,
  "EXECTYPE" varchar(45) NOT NULL,
  "MD5SUM" varchar(35) DEFAULT NULL,
  "DESCRIPTION" varchar(255) DEFAULT NULL,
  "COMMENTS" varchar(255) DEFAULT NULL,
  "TAG" varchar(255) DEFAULT NULL,
  "LIQUIBASE" varchar(20) DEFAULT NULL,
  "CONTEXTS" varchar(255) DEFAULT NULL,
  "LABELS" varchar(255) DEFAULT NULL,
  "DEPLOYMENT_ID" varchar(10) DEFAULT NULL,
  PRIMARY KEY ("ID")
)

答案 1 :(得分: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);