PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come passare un array di tipi personalizzati alla funzione Postgres

Puoi utilizzare la sintassi alternativa con un letterale array invece del costruttore di array, che è un costrutto simile a una funzione Postgres e può causare problemi quando è necessario passare valori - come in una dichiarazione preparata:

SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                  , '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
                    , "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);

Ho aggiunto un'interruzione di riga tra i due tipi di riga nell'array per la visualizzazione. È legale.

Come trovare la sintassi corretta per qualsiasi letterale?

Chiedi a Postgres. Ecco una demo:

CREATE TABLE mytype (id uuid, amount numeric(13,4));

INSERT INTO mytype VALUES
  ('0d6311cc-0d74-4a32-8cf9-87835651e1ee', 25)
 ,('6449fb3b-844e-440e-8973-31eb6bbefc81', 10);

SELECT ARRAY(SELECT m FROM mytype m);

Resi:

{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}

db<>gioca qui

Qualsiasi tabella (comprese le tabelle temporanee) crea implicitamente un tipo di riga con lo stesso nome.