2013-08-14 2 views
6

Как вставить array of enums?
Вот мой enum:PostgreSQL INSERT в массив перечислений

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.

5

В качестве альтернативы к ARRAY constructorlike @Mark correctly supplied состоит в бросить строку буквального непосредственно:

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

Этот вариант короче и некоторые клиенты имеют проблемы с конструктором ARRAY, который является функцией типа элемента.

0

Старый вопрос, но новый ответ. В современных версиях Postgres (проверено с 9.6) все это не требуется. Он работает как ожидалось:

INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}'); 
Смежные вопросы