12

私は現在、テーブルtable_aを作成するためにliquibase.xmlファイルに取り組んでいます。私の分野の1つは<column name="state" type="ENUM('yes','no')"> 、DBMSとしてpostgresqlを使用していることです。列挙型データ型のようなものはありますか?私はこれをhttp://wiki.postgresql.org/wiki/Enumのように読みました

そのpostgresqlにはそのようなデータ型はありません。このデータ型を作成するには、CREATETYPE関数を使用します。でも、liquibaseでそれを作る方法はまだわかりません。

助言がありますか?

4

2 に答える 2

23

もちろん、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>

単純なyes/no列の場合、実際に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 に答える