3

有没有人知道如何用 liquibase 制作不区分大小写的表格。我正在使用最新的 postgres。例如 liquibase 以这种方式创建表:

创建表“用户”(
  "userId" 整数唯一不为空,
  “userFirstName” varchar(50) 不为空,
  “userLastName” varchar(50) 不为空
);

但是如何使 liquibase 以这种方式创建表:

创建表用户(
  userId 整数唯一不为空,
  userFirstName varchar(50) 不为空,
  userLastName varchar(50) 不为空
);

4

2 回答 2

3

如果 liquibase 没有生成您想要的内容,您始终可以使用该标签指定您想要执行的确切 SQL。

默认的 postgres 支持始终在表名和列名周围使用引号,因此使用保留字作为对象名不会有问题。您可以通过创建自己的 liquibase.database.core.PostgresDatabase 子类并让 liquibase 使用您的类来覆盖它。有一个 escapeDatabaseObject(String) 方法,它在原始字符串中传递并返回带引号的值。您只需要重写此方法即可返回未触及的原始字符串。

你如何使用你的数据库取决于你的 liquibase 版本。如果您正在使用即将发布的 2.0 版本 ( http://liquibase.org/ci/latest ) 的快照,您只需将类保存在 liquibase.database.ext 包中。如果您使用的是 1.9,则应该有一个 databaseClassName 参数可以用来告诉 liquibase 您的类。

于 2010-06-08T14:18:54.027 回答
1

Liquibase 3.0 开始objectQuotingStrategy,有一个databaseChangeLog. 默认值是LEGACY,但它可以更改为QUOTE_ONLY_RESERVED_WORDS大多数情况下将更改日志变为对 PostgreSQL 不区分大小写:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd" 
        objectQuotingStrategy="QUOTE_ONLY_RESERVED_WORDS">

该属性也可用于特定的changeSet,但我不确定,因为它可能会更改更改集的校验和。当然,您也可以将它与YAML 配置一起使用。

PostgreSQL 行为在About PostgreSQL Case Sensitivity中解释。

于 2020-03-12T12:57:04.943 回答