U kunt de alternatieve syntaxis gebruiken met een array letterlijke in plaats van de array-constructor, die een Postgres-functie-achtige constructie is en problemen kan veroorzaken wanneer u waarden moet doorgeven - zoals in een voorbereide verklaring:
SELECT myschema.myfunc('0d6311cc-0d74-4a32-8cf9-87835651e1ee'
, '{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee, 25)"
, "(6449fb3b-844e-440e-8973-31eb6bbefc81, 10)"}'::mytype[]);
Ik heb een regeleinde toegevoegd tussen de twee rijtypen in de array voor weergave. Dat is legaal.
De juiste syntaxis vinden voor elke letterlijk?
Vraag het maar aan Postgres. Hier is een 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);
Retourneren:
{"(0d6311cc-0d74-4a32-8cf9-87835651e1ee,25.0000)","(6449fb3b-844e-440e-8973-31eb6bbefc81,10.0000)"}
db<>viool hier
Elke tabel (inclusief tijdelijke tabellen) creëert impliciet een rijtype met dezelfde naam.