Advies tot nu toe is niet optimaal. Er is een eenvoudigere oplossing en een daadwerkelijk toepasbare uitleg.
Bij twijfel vraag Postgres gewoon om het je te laten zien :
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[]
);
Voeg 2 basisrijen in:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Zie de syntaxis voor het basistype rij :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Bekijk de syntaxis voor een array van rijen :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Het enige dat u nodig hebt, is om elke letterlijke rij tussen dubbele aanhalingstekens te plaatsen - wat alleen nodig is om de speciale betekenis van de komma uit te schakelen binnen elk rijtype.
Extra (escape) dubbele aanhalingstekens zouden overbodige ruis zijn, terwijl er geen extra speciale tekens zijn.
Dit heeft niets te maken met escape string syntax , die uit is uitgeschakeld standaard sinds Postgres 9.1. U zou de syntaxis van de escape-tekenreeks expliciet moeten declareren door E
. voor te voegen , zoals E'string\n'
. Maar er is geen goede reden om dat te doen.
db<>fiddle hier
Oude sqlfiddle
Gerelateerd antwoord met meer uitleg:
- Voeg tekst in met enkele aanhalingstekens in PostgreSQL
- Hoe een aangepast type array door te geven aan de Postgres-functie
- PL/pgSQL Reeks rijen