12

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

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

有什么建议么?

4

2 回答 2

23

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

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

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

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

于 2011-02-27T13:47:10.960 回答
3

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

于 2011-02-27T18:16:21.710 回答