我有一个客户要求他自己创建表。这迫使我也允许客户定义2个liquibase表。没问题,因为liquibase允许设置表名。
databasechangeloglock表有问题。原来客户只支持以下数据类型:
INTEGER
NUMBER
VARCHAR
FLOAT
DATE
布尔值不存在,所以我在lock
字段上遇到了麻烦。
我尝试使用VARCHAR (5)
定义表。
这对INSERT有效,但对UPDATE有效。 Where子句:LOCK = FALSE
在以下方面失败:
operator does not exist: character varying = boolean
根据此页面,我认为它应该使用Int,但似乎没有。 https://www.liquibase.org/documentation/databasechangeloglock_table.html
有没有指示Liquibase使用另一种数据类型的指令?
答案 0 :(得分:0)
Liquibase应该基于基础数据库为locked
列创建类型。
检查此类CreateDatabaseChangeLogLockTableGenerator和generateSql
方法。
它将使用BooleanType查找locked
列的类型。
对于某些DB(Derby和DB2),它将寻找方法supportsBooleanDataType()
。
因此,也许可以通过从database/core中的数据库的正确类继承来覆盖它。然后仅提供supportsBooleanDataType()
并返回false
。
应该有一种方法来包含自己的数据库类版本,以便您可以更改行为。