liquibase 的枚举数据类型

发布于 2024-10-19 13:56:08 字数 373 浏览 3 评论 0原文

我目前正在处理 liquibase.xml 文件来创建表 table_a。我的字段之一是 我使用 postgresql 作为我的 DBMS。有没有类似 enum 的数据类型? 我读过这样的 http://wiki.postgresql.org/wiki/Enum

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

有什么建议吗?

I'm currently working on a liquibase.xml file to create table table_a. One of my fields is <column name="state" type="ENUM('yes','no')">
I'm using postgresql as my DBMS. is there anything like enum data type?
I've read in this like http://wiki.postgresql.org/wiki/Enum

that postgresql doesn't have such data type. CREATE TYPE function is used to create this data type. I still don't know how to make it in liquibase though.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深海少女心 2024-10-26 13:56:08

当然,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 类型而不是枚举

Well of course PostgreSQL has an enum type (which is clearly documented in the link you have shown and the manual).

I don't think Liquibase "natively" supports enums for PostgreSQL, but you should be able to achieve it with a custom 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>

For a simple yes/no column, I'd actually use the boolean type instead of an enum

几味少女 2024-10-26 13:56:08

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

An alternative to creating a new type would be a simple CHECK constraint on a varchar(3) column:

<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>

That might play better with the client side, or not. I think boolean (as suggested by a_horse_with_no_name) would be a better call for this specific case: saying exactly what you mean usually works out better than the alternatives.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文