PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment passer un tableau de type personnalisé à la fonction Postgres

Vous pouvez utiliser la syntaxe alternative avec un littéral de tableau au lieu du constructeur de tableau, qui est une construction de type fonction Postgres et peut causer des problèmes lorsque vous devez transmettre des valeurs - comme dans une déclaration préparée :

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

J'ai ajouté un saut de ligne entre les deux types de ligne dans le tableau pour l'affichage. C'est légal.

Comment trouver la syntaxe correcte pour any littéral ?

Demandez à Postgres. Voici une démo :

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

Renvoie :

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

db<>jouez ici

Toute table (y compris les tables temporaires) crée implicitement un type de ligne du même nom.