PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como passar array de tipo personalizado para a função Postgres


Você pode usar a sintaxe alternativa com um literal de matriz em vez do construtor de matriz, que é uma construção semelhante a uma função do Postgres e pode causar problemas quando você precisa passar valores - como em uma declaração preparada:
SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
                  , '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
                    , "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);

Eu adicionei uma quebra de linha entre os dois tipos de linha na matriz para exibição. Isso é legal.

Como encontrar a sintaxe correta para qualquer literal?


Basta perguntar ao Postgres. Aqui está uma demonstração:
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);

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

db<>mexa aqui

Qualquer tabela (incluindo tabelas temporárias) cria implicitamente um tipo de linha com o mesmo nome.