1

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

Bucardo 使用主键进行迁移。

我有许多没有主键的 public.databasechangelog 数据库。如何正确地将主键添加到 Liquibase 的数据库更改日志(PostgreSQL)?

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

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

4

2 回答 2

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")
)
于 2021-02-14T13:46:34.500 回答
1

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);
于 2017-05-15T08:45:52.987 回答