2013-08-14 10 views
6

Wie kann ich ein array of enums einfügen?
Hier ist meine enum:PostgreSQL INSERT in ein Array von Enums

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

Dann hat mein Tisch eine Reihe von Geräten:

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

Hier mein Versuch ist einzufügen:

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

Aber es gibt mir die folgende Fehler:

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. 

Antwort

9

PostgreSQL kann nicht automatisch Eingang vom Typ text zum Eingang vom Typ equipment umwandeln. Sie müssen explizit die Saiten als Typ deklarieren ist equipment:

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

ich dies mit SQL Fiddle bestätigt.

5

Die Alternative zu einem ARRAY constructorlike @Mark correctly supplied ist zu wörtlichen direkt einen String Stimmen:

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

Diese Variante ist kürzer und einige Kunden haben Probleme mit dem Array-Konstruktor, der eine Funktion artiges Element ist.

0

Alte Frage, aber eine neue Antwort. In modernen Versionen von Postgres (getestet mit 9.6) ist nichts davon erforderlich. Es funktioniert wie erwartet:

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