数据库更改的自定义数据类型

时间:2019-07-16 15:35:47

标签: liquibase

我有一个客户要求他自己创建表。这迫使我也允许客户定义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使用另一种数据类型的指令?

1 个答案:

答案 0 :(得分:0)

Liquibase应该基于基础数据库为locked列创建类型。

检查此类CreateDatabaseChangeLogLockTableGeneratorgenerateSql方法。

它将使用BooleanType查找locked列的类型。 对于某些DB(Derby和DB2),它将寻找方法supportsBooleanDataType()

因此,也许可以通过从database/core中的数据库的正确类继承来覆盖它。然后仅提供supportsBooleanDataType()并返回false

应该有一种方法来包含自己的数据库类版本,以便您可以更改行为。