Jak dotąd porady nie są optymalne. Istnieje prostsze rozwiązanie i faktycznie odpowiednie wyjaśnienie.
W razie wątpliwości poproś Postgres, aby Ci pokazał :
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[]
);
Wstaw 2 podstawowe rzędy:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Zobacz składnię podstawowego typu wiersza :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Zobacz składnię tablicy wierszy :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Wszystko, czego potrzebujesz, to ujęcie każdego literału wiersza w podwójnych cudzysłowach — co jest konieczne tylko do wyłączenia specjalnego znaczenia przecinka w każdym typie wiersza.
Dodatkowe (unieważnione) podwójne cudzysłowy byłyby nadmiarowym szumem, podczas gdy nie ma żadnych dodatkowych znaków specjalnych.
Nic z tego nie ma nic wspólnego ze składnią ciągu znaków ucieczki , który został wyłączony domyślnie od Postgres 9.1. Musiałbyś jawnie zadeklarować składnię łańcucha ucieczki przez przedrostek E
, jak E'string\n'
. Ale nie ma ku temu dobrego powodu.
db<>fiddle tutaj
Stary sqlfiddle
Powiązana odpowiedź z dodatkowym wyjaśnieniem:
- Wstaw tekst z pojedynczym cytaty w PostgreSQL
- Jak przekazać niestandardową tablicę typów do funkcji Postgresa
- PL/pgSQL Tablica wierszy