在 postgres 中使用 liquibase 制作不区分大小写的表
Posted
技术标签:
【中文标题】在 postgres 中使用 liquibase 制作不区分大小写的表【英文标题】:Making case insensitive table with liquibase in postgres 【发布时间】:2010-06-08 09:11:09 【问题描述】:是否有人知道如何使用 liquibase 制作不区分大小写的表格。我正在使用最新的 postgres。 例如 liquibase 以这种方式创建表:
创建表“用户”( "userId" 整数唯一不为空, “userFirstName” varchar(50) 不为空, “userLastName” varchar(50) 不为空 );
但是如何使 liquibase 以这种方式创建表:
创建表用户( userId 整数唯一不为空, userFirstName varchar(50) 不为空, userLastName varchar(50) 不为空 );
【问题讨论】:
好像是***.com/questions/22616545/…的反问题 【参考方案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 行为。
【讨论】:
以上是关于在 postgres 中使用 liquibase 制作不区分大小写的表的主要内容,如果未能解决你的问题,请参考以下文章
Liquibase / Spring Boot / Postgres - 模式名称不起作用
必须在 Liquibase 上指定 changeLogFile 错误
如何将mm:ss时间字符串转换为秒整数(postgres / liquibase)
数据库更改日志表未在 Liquibase 的 Postgres 环境中创建