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 );
答案 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的行为。