PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So übergeben Sie ein benutzerdefiniertes Typ-Array an die Postgres-Funktion

Sie können die alternative Syntax mit einem Array-Literal verwenden anstelle des Array-Konstruktors, der ein Postgres-funktionsähnliches Konstrukt ist und Probleme verursachen kann, wenn Sie Werte übergeben müssen - wie in einer vorbereiteten Anweisung:

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

Ich habe einen Zeilenumbruch zwischen den beiden Zeilentypen im Array für die Anzeige hinzugefügt. Das ist legal.

So finden Sie die korrekte Syntax für beliebige wörtlich?

Fragen Sie einfach Postgres. Hier ist eine 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);

Rückgabe:

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

db<>hier fummeln

Jede Tabelle (einschließlich temporärer Tabellen) erstellt implizit einen Zeilentyp mit demselben Namen.