在postgres中使用liquibase制作不区分大小写的表

时间:2010-06-08 09:11:09

标签: liquibase

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

create table "Users" (
  "userId" integer unique not null,
  "userFirstName" varchar(50) not null,
  "userLastName" varchar(50) not null
);

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

create table Users (
  userId integer unique not null,
  userFirstName varchar(50) not null,
  userLastName varchar(50) not null
);

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Liquibase 3.0 起,AnythingElse就有一个属性objectQuotingStrategy。默认值为databaseChangeLog,但可以将其更改为LEGACY,这通常会使更改日志变得对PostgreSQL不区分大小写:

QUOTE_ONLY_RESERVED_WORDS

该属性也可用于特定的<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"> ,但我不确定,因为它可能会更改更改集的校验和。您当然也可以将其与YAML config一起使用。

About PostgreSQL Case Sensitivity中说明了PostgreSQL的行为。