2013-08-14 12 views
6

Jak mogę wstawić array of enums?
Oto mój enum:PostgreSQL INSERT do tablicy wyliczeń

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

Wtedy mój stół posiada szereg urządzeń:

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

Oto moja próba INSERT:

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

ale daje mi następujący błąd:

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. 

Odpowiedz

9

PostgreSQL nie wie, jak automatycznie rzutować dane wejściowe typu text na wejście typu equipment. Trzeba wyraźnie zadeklarować jako ciągi typu equipment:

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

I potwierdził to z SQL Fiddle.

5

Alternatywą do ARRAY constructorlike @Mark correctly supplied jest rzucać ciąg dosłownego bezpośrednio:

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

Wariant ten jest krótszy, a niektórzy klienci mają problemy z konstruktora Array, która jest elementem funkcji podobny.

0

Stare pytanie, ale nowa odpowiedź. We współczesnych wersjach PostgreSQL (testowane z 9.6) nie jest to wymagane. Działa zgodnie z oczekiwaniami:

INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}'); 
Powiązane problemy