Rådgivningen er indtil videre ikke optimal. Der er en enklere løsning og en faktisk anvendelig forklaring.
Når du er i tvivl, beder du bare Postgres om at vise dig :
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[]
);
Indsæt 2 grundlæggende rækker:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Se syntaksen for den grundlæggende rækketype :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Se syntaksen for en matrix af rækker :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Alt du behøver er at omslutte hver række bogstaver i dobbelte anførselstegn - hvilket kun er nødvendigt for at deaktivere den særlige betydning af kommaet inden for hver rækketype.
Yderligere (undgåede) dobbelte anførselstegn ville være redundant støj, mens der ikke er yderligere specialtegn.
Intet af dette har noget at gøre med escape-strengsyntaks , som er blevet fra som standard siden Postgres 9.1. Du bliver nødt til at erklære escape-strengsyntaks eksplicit ved at sætte præfikset E
, som E'string\n'
. Men der er ingen god grund til at gøre det.
db<>fiddle her
Gamle sqlfiddle
Relateret svar med mere forklaring:
- Indsæt tekst med enkeltstående citater i PostgreSQL
- Sådan sender du tilpasset type-array til Postgres-funktionen
- PL/pgSQL række rækker a>