【问题标题】:Making case insensitive table with liquibase in postgres在 postgres 中使用 liquibase 制作不区分大小写的表
【发布时间】:2010-06-08 09:11:09
【问题描述】:

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

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

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

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

【问题讨论】:

标签: liquibase


【解决方案1】:

如果 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 您的类。

【讨论】:

  • 我使用的是 liquibase 1.9,但这对我来说已经足够了。谢谢。
【解决方案2】:

Liquibase 3.0 开始,databaseChangeLog 有一个属性 objectQuotingStrategy。默认为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 config 一起使用。

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

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 2019-11-11
    • 2015-07-05
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2020-03-28
    相关资源
    最近更新 更多