Råden hittills är inte optimala. Det finns en enklare lösning och en faktiskt tillämplig förklaring.
När du är osäker, be bara Postgres visa 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[]
);
Infoga 2 grundläggande rader:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Se syntaxen för den grundläggande radtypen :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Se syntaxen för en array av rader :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Allt du behöver är att omge varje rad bokstavligen med dubbla citattecken - vilket bara är nödvändigt för att inaktivera den speciella betydelsen av komma inom varje radtyp.
Ytterligare (escaped) dubbla citattecken skulle vara redundant brus medan det inte finns några extra specialtecken.
Inget av detta har något att göra med escape-strängsyntax , som har stängts av av som standard sedan Postgres 9.1. Du måste explicit deklarera escape-strängsyntax genom att prefixet E
, som E'string\n'
. Men det finns ingen bra anledning att göra det.
Relaterat svar med mer förklaring:
- Infoga text med singel citat i PostgreSQL
- Hur man skickar anpassad typ array till Postgres funktion
- PL/pgSQL Array of Rows