Les conseils jusqu'à présent ne sont pas optimaux. Il existe une solution plus simple et une explication réellement applicable.
En cas de doute, demandez simplement à Postgres de vous montrer :
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[]
);
Insérez 2 lignes de base :
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Voir la syntaxe du type de ligne de base :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Voir la syntaxe d'un tableau de lignes :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Tout ce dont vous avez besoin est de placer chaque littéral de ligne entre guillemets - ce qui est uniquement nécessaire pour désactiver la signification spéciale de la virgule dans chaque type de ligne.
Des guillemets supplémentaires (échappés) seraient du bruit redondant alors qu'il n'y a pas de caractères spéciaux supplémentaires.
Rien de tout cela n'a rien à voir avec la syntaxe de la chaîne d'échappement , qui a été désactivé par défaut depuis Postgres 9.1. Vous devrez déclarer explicitement la syntaxe de la chaîne d'échappement en préfixant E
, comme E'string\n'
. Mais il n'y a aucune bonne raison de le faire.
db<>violon ici
Ancien sqlfiddle
Réponse connexe avec plus d'explications :
- Insérer du texte avec un seul guillemets dans PostgreSQL
- Comment passer un tableau de type personnalisé à la fonction Postgres
- PL/pgSQL Tableau de lignes