如何在liquibase中指定ENUM的数组



我正在尝试创建一个具有enum数组类型列的表。样品为

<sql>CREATE TYPE part_state_type AS ENUM ('A','B','C','D');</sql>
<createTable tableName="parts">
<column name="part_state" type="part_state_type []">
</column>
</createTable>

当我运行迁移时;我得到以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE PUBLIC.PARTS (PART_STATE ENUM('A', 'B', 'C', 'D') [[*]]) "; expected "FOR, UNSIGNED, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE PUBLIC.parts (part_state ENUM('A', 'B', 'C', 'D') []) [42001-197]

知道如何创建ENUM数组类型的列吗?我使用的是Java 11,liquibase版本是3.5.3,h2版本是1.4.197。基于此https://oliha.dev/articles/enums-as-arrays-in-postgresql/在postgresql中似乎可以使用enum数组。所以,我不知道为什么利口酒会失败。

在1.4.197中,持久数据库中的ENUM值被破坏,此问题在后续版本中得到修复。

ENUM值的数组在H2的所有版本中都被破坏了,我在错误跟踪器中填充了一个关于它的新问题:https://github.com/h2database/h2database/issues/2935

请注意,ENUM(something) ARRAY语法仅受当前H2支持,H2 2.0将支持它。H2的发布版本没有类型化数组,您可以在其中使用普通的ARRAY数据类型,但使用持久化值可能会遇到同样的问题。内存数据库假设可能不会受到影响。

最新更新