Тип данных enum для ликвидазы - PullRequest
8 голосов
/ 27 февраля 2011

В настоящее время я работаю над файлом liquibase.xml для создания таблицы table_a. Одно из моих полей <column name="state" type="ENUM('yes','no')"> Я использую postgresql в качестве моей СУБД. Есть ли что-нибудь, как тип данных enum? Я читал в этом как http://wiki.postgresql.org/wiki/Enum

что postgresql не имеет такого типа данных. Функция CREATE TYPE используется для создания этого типа данных. Я до сих пор не знаю, как сделать это в ликвидазе.

Есть предложения?

Ответы [ 2 ]

17 голосов
/ 27 февраля 2011

Ну, конечно, PostgreSQL имеет тип enum (который четко задокументирован в указанной вами ссылке и руководстве).

Я не думаю, что 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 голос
/ 27 февраля 2011

Альтернативой созданию нового типа может быть простое ограничение CHECK для столбца varchar(3):

<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) было бы лучшим вызовом для этого конкретного случая: сказать, что именно вы имеете в виду, обычно лучше, чем альтернативы.

...