2011-12-31 38 views
1

のカラムを変更:今のPostgreSQL:これは、列挙型の定義で列挙型

CREATE TYPE khstate AS ENUM ('none', 'form', 'test', 'finished'); 

、データベーステーブル内のIは、列「ID」(タイプSERIAL)と「状態」と行を有します(タイプkhstate)。 'id'列の値は100004で、 'state'列の値は 'none'です。どのように私はそれを「フォーム」に変更するのですか?テーブルの定義は以下の通りです。列挙khstateに無効な入力値: "フォーム"

UPDATE tablename SET state = 'form'::khstate WHERE id = 100004; 

ERROR:列挙khstateに無効な入力値:「フォームIは、

UPDATE tablename SET state = 'form' WHERE id = 100004; 

エラーとしてクエリを試みた

CREATE TABLE IF NOT EXISTS khs ( 
    id SERIAL UNIQUE, 
    state khstate DEFAULT 'none', 
    PRIMARY KEY (id) 
); 

しかし成功しません。私は最新のBitNami LAPPstackを使用しているので、PostgreSQLのバージョンは9.1.1です。

私はどのようなRULE制約やTRIGGER制約を追加したり、トランザクションを明示的に使用したりすることはありません。

Googleは解決策を試しましたが、列の値ではなく、列挙型自体を変更する方法がわかりました。

+0

"しかし役に立たない。手段? –

+2

両方のフォームがここで動作します。質問を編集して、CREATE TABLEステートメントと実際のエラーメッセージを含めます。 (コピー&ペースト、再入力しないでください) –

+0

好奇心 - UPDATE文を実行した後、トランザクションをコミットしましたか? –

答えて

2

エラーメッセージは、'form'がenumタイプkhstateの登録値ではないことを示しています。

あなたの質問ではkhsという名前のテーブルを作成しましたが、UPDATEの例ではtablenameが代わりに使用されています。

テーブル、スキーマ、またはデータベースが混在することがあります。あなたのエラーメッセージが表示されます同じセッションでこのクエリを実行して、問題を診断:

SELECT enum_range(NULL::khstate) 

あなたは値の配列にformを参照していますか?私は期待しています、あなたはしません。

詳細enum support functions in the manualについて

+0

ありがとう!私は 'フォーム'の価値が実際に値の配列の中に列挙されていなかったことは非常に恥ずかしいです。私はタイプミスをしました。 :-( ご迷惑おかけして申し訳ありません"。 – tuope