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

如何为Liquibase正确地向databasechangelog(PostgreSQL)添加主键?,postgresql,liquibase,bucardo,Postgresql,Liquibase,Bucardo,我试图通过Bucardo将数据库从旧的PostgreSQL(9.3)迁移到新的PostgreSQL(9.5,9.6) Bucardo使用主键进行迁移 我有许多带有public.databasechangelog但没有主键的数据库。 如何为Liquibase向databasechangelog(PostgreSQL)添加主键 更新答案: 我可以通过SQL添加主键,但可能是Liquibase,在XML中是否有添加主键的设置 通过SQL安全地将主键添加到public.databasechangelog

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

Bucardo使用主键进行迁移

我有许多带有public.databasechangelog但没有主键的数据库。 如何为Liquibase向databasechangelog(PostgreSQL)添加主键

更新答案: 我可以通过SQL添加主键,但可能是Liquibase,在XML中是否有添加主键的设置


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

Liquibase开发人员决定删除该表上的主键,因为显然,由于索引项的最大大小受到限制,一些DBM在这三列上创建索引时存在问题

例如,参见本讨论:

Postgres不受这些限制,因此您只需添加一个即可:

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

我在开始时使用主键创建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")
)

为那张桌子液化。但是边缘情况(在bug中提到)似乎不适用于PostgreSQL(只要您没有真正大的迁移id——即1GB以上)。@pozs:
id
限制为255个字符。这三列的最大总大小为765个字符,这是现代DBMS应该能够索引的。PK的不存在确实是由于某些DBMS的限制造成的:(旧版本的Liquibase实际上在该表上有一个主键)@a_horse_,没有名字啊,我明白了。那么,这绝对不会给PostgreSQL带来任何问题。但为什么要使用255 varchar列作为主键呢?拥有一个由三个婴儿组成的组合键简直就是疯了,IMHO.
ID
不是主键。该表的主键(唯一键)由
id
author
filename