liquibase的枚举数据类型

时间:2011-02-27 13:21:10

标签: postgresql liquibase liquid-layout

我目前正在处理liquibase.xml文件以创建表table_a。我的一个字段是<column name="state" type="ENUM('yes','no')"> 我正在使用postgresql作为我的DBMS。有什么像枚举数据类型? 我读过这里就像http://wiki.postgresql.org/wiki/Enum

postgresql没有这样的数据类型。 CREATE TYPE函数用于创建此数据类型。我仍然不知道如何在liquibase中制作它。

有什么建议吗?

2 个答案:

答案 0 :(得分:17)

当然,PostgreSQL有一个枚举类型(在您显示的链接和手册中清楚地记录了这一点)。

我不认为Liquibase“本地”支持PostgreSQL的枚举,但您应该能够使用自定义SQL实现它:

<changeSet id="1" author="Arthur">
  <sql>CREATE TYPE my_state AS ENUM ('yes','no')</sql>
  <table name="foo">
    <column name="state" type="my_state"/>
  </table>
</changeSet>

对于一个简单的是/否列,我实际上使用boolean类型而不是枚举

答案 1 :(得分:1)

创建新类型的替代方法是varchar(3)列上的简单CHECK约束:

<changeSet id="1" author="X">
    <table name="t">
        <column name="c" type="varchar(3)"/>
    </table>
    <sql>ALTER TABLE t ADD CONSTRAINT check_yes_no CHECK (c = 'yes' OR c = 'no')</sql>
</changeSet>

对于客户端而言,这可能会更好。我认为boolean(正如a_horse_with_no_name所建议的)对于这个具体案例会更好一点:准确地说出你的意思通常比其他选择更好。