2013-08-14 16 views
6

Come posso inserire uno array of enums?
Ecco il mio enum:INSERIMENTO PostgreSQL in una serie di enumerazioni

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

Poi il mio tavolo ha una serie di attrezzature:

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

Ecco il mio tentativo di inserire:

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

Ma mi dà il seguente errore:

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. 

risposta

9

PostgreSQL non sa come trasmettere automaticamente l'input di tipo text all'input di tipo equipment. Si deve dichiarare esplicitamente le corde come di tipo equipment:

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

Ho confermato questo con SQL Fiddle.

5

L'alternativa a un ARRAY constructorlike @Mark correctly supplied è quello gettato una stringa letterale direttamente:

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

Questa variante è più corto e alcuni clienti hanno problemi con il costruttore ARRAY, che è un elemento funzione simile.

0

Vecchia domanda, ma una nuova risposta. Nelle versioni moderne di Postgres (testato con 9.6) nulla di tutto questo è richiesto. Funziona come previsto:

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