Досегашните съвети не са оптимални. Има по-просто решение и действително приложимо обяснение.
Когато се съмнявате, просто помолете Postgres да ви покаже :
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[]
);
Вмъкнете 2 основни реда:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Вижте синтаксиса за основния тип ред :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Вижте синтаксиса за масив от редове :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Всичко, от което се нуждаете, е да оградите всеки литерал на ред в двойни кавички - което е необходимо само за деактивиране на специалното значение на запетая във всеки тип ред.
Допълнителните (екранирани) двойни кавички биха били излишен шум, докато няма допълнителни специални знаци.
Нищо от това няма нищо общо със синтаксиса на екраниращия низ , който е изключен по подразбиране от Postgres 9.1. Ще трябва изрично да декларирате синтаксиса на екраниращия низ чрез префикс E
, като E'string\n'
. Но няма основателна причина да го правите.
Свързан отговор с повече обяснения:
- Вмъкване на текст с единичен кавички в PostgreSQL
- Как да предадете персонализиран тип масив към функцията на Postgres
- PL/pgSQL масив от редове