Dosavadní rady nejsou optimální. Existuje jednodušší řešení a skutečně použitelné vysvětlení.
Pokud si nejste jisti, požádejte Postgres, aby vám ukázal :
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[]
);
Vložte 2 základní řádky:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Podívejte se na syntaxi základního typu řádku :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Podívejte se na syntaxi pole řádků :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Vše, co potřebujete, je uzavřít každý řádkový literál do dvojitých uvozovek – což je nutné pouze k deaktivaci speciálního významu čárky v každém typu řádku.
Dodatečné (escapované) dvojité uvozovky by byly nadbytečným šumem, protože by tam nebyly žádné další speciální znaky.
Nic z toho nemá nic společného se syntaxí únikového řetězce , který byl vypnut ve výchozím nastavení od Postgres 9.1. Syntaxi escape řetězce byste museli explicitně deklarovat předponou E
, například E'string\n'
. Ale není k tomu žádný dobrý důvod.
db<>fiddle zde
Starý sqlfiddle
Související odpověď s podrobnějším vysvětlením:
- Vložit text s jedním uvozovky v PostgreSQL
- Jak předat pole vlastního typu funkci Postgres
- PL/pgSQL Pole řádků