我目前正在处理liquibase.xml文件以创建表table_a。我的一个字段是<column name="state" type="ENUM('yes','no')">
我正在使用postgresql作为我的DBMS。有什么像枚举数据类型?
我读过这里就像http://wiki.postgresql.org/wiki/Enum
postgresql没有这样的数据类型。 CREATE TYPE函数用于创建此数据类型。我仍然不知道如何在liquibase中制作它。
有什么建议吗?
答案 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所建议的)对于这个具体案例会更好一点:准确地说出你的意思通常比其他选择更好。