【问题标题】:enum data type for liquibaseliquibase 的枚举数据类型
【发布时间】:2011-02-27 13:21:09
【问题描述】:

我目前正在使用 liquibase.xml 文件来创建表 table_a。我的一个领域是<column name="state" type="ENUM('yes','no')"> 我使用 postgresql 作为我的 DBMS。有没有类似枚举数据类型的东西? 我读过类似http://wiki.postgresql.org/wiki/Enum

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

有什么建议吗?

【问题讨论】:

    标签: postgresql liquibase liquid-layout


    【解决方案1】:

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

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

    CREATE TYPE my_state AS ENUM ('yes','no')

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

    【讨论】:

    【解决方案2】:

    创建新类型的替代方法是在 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 所建议的那样)对于这种特定情况来说是一个更好的选择:准确地说出你的意思通常比其他选择更好。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2011-09-17
    相关资源
    最近更新 更多