2013-08-14 15 views
6

array of enumsを挿入するにはどうすればよいですか?ここで
は私enumです:PostgreSQL列挙型の配列への挿入

CREATE TYPE equipment AS ENUM ('projector','PAsystem','safe','PC','phone'); 

その後、私のテーブルには、設備の配列を持っています。ここ

CREATE TABLE lecture_room (
    id INTEGER DEFAULT NEXTVAL('lecture_id_seq') 
, seatCount int 
, equipment equipment[] 
) INHERITS(venue); 

挿入する私の試みです:

INSERT INTO lecture_room (building_code, floorNo, roomNo, length, width 
         , seatCount, equipment) 
VALUES 
('IT', 4, 2, 10, 15 ,120, ARRAY['projector','PAsystem','safe']), 

をしかし、それは私に次のようになりますエラー:

ERROR: column "equipment" is of type equipment[] but expression is of type text[] 
SQL state: 42804 
Hint: You will need to rewrite or cast the expression. 

答えて

9

PostgreSQLはタイプtextの入力をタイプequipmentの入力に自動的にキャストする方法を知らないあなたは明示的にタイプequipmentのものとして、あなたの文字列を宣言する必要があります。

ARRAY['projector','PAsystem','safe']::equipment[] 

私はSQL Fiddleでこれを確認しました。 ARRAY constructor

5

代替like @Mark correctly suppliedにある直接文字列リテラルをキャスト:

'{projector,PAsystem,safe}'::equipment[] 

この変形が短くなると、一部のクライアントは機能のような要素である配列コンストラクタ、との問題を抱えています。

0

古い質問ですが新しい回答です。現在のバージョンのPostgres(9.6でテスト済み)では、これは必須ではありません。期待どおりに動作します。

INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}');