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

Korrekte Syntax für Array des zusammengesetzten Typs

Die bisherige Beratung ist nicht optimal. Es gibt eine einfachere Lösung und eine tatsächlich anwendbare Erklärung.
Im Zweifelsfall bitten Sie einfach Postgres, es Ihnen zu zeigen :

CREATE TEMP TABLE pencil_count (  -- table also registers row type
  pencil_color varchar(30)
, count integer
);

CREATE TEMP TABLE pencils (
  id serial
, pencils_ pencil_count[]
);

Fügen Sie 2 grundlegende Zeilen ein:

INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);

Sehen Sie sich die Syntax für den grundlegenden Zeilentyp an :

SELECT p::text AS p_row FROM pencil_count p;

  p_row
----------
 (red,1)
 (blue,2)

Sehen Sie sich die Syntax für ein Array von Zeilen an :

SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;

       p_row_arr
------------------------
 {"(red,1)","(blue,2)"}

Alles, was Sie brauchen, ist, jedes Zeilenliteral in doppelte Anführungszeichen einzuschließen - was nur notwendig ist, um die besondere Bedeutung des Kommas zu deaktivieren innerhalb jedes Zeilentyps.
Zusätzliche (escaped) doppelte Anführungszeichen wären überflüssiges Rauschen, während es keine zusätzlichen Sonderzeichen gibt.

Nichts davon hat irgendetwas mit Escape-String-Syntax zu tun , die deaktiviert wurde standardmäßig seit Postgres 9.1. Sie müssten die Escape-String-Syntax explizit deklarieren, indem Sie E voranstellen , wie E'string\n' . Aber es gibt keinen guten Grund dafür.

db<>fiddle hier
Altes sqlfiddle

Verwandte Antwort mit mehr Erklärung: