sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo pasar una matriz de tipo personalizado a la función de Postgres

Puede usar la sintaxis alternativa con un array literal en lugar del constructor de matriz, que es una construcción similar a una función de Postgres y puede causar problemas cuando necesita pasar valores - como en una declaración preparada:

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

Agregué un salto de línea entre los dos tipos de fila en la matriz para mostrar. Eso es legal.

Cómo encontrar la sintaxis correcta para any literal?

Pregúntele a Postgres. Aquí hay una demostración:

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);

Devoluciones:

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

db<>violín aquí

Cualquier tabla (incluidas las tablas temporales) crea implícitamente un tipo de fila con el mismo nombre.