O conselho até agora não é o ideal. Existe uma solução mais simples e uma explicação realmente aplicável.
Em caso de dúvida, peça ao Postgres para mostrar a você :
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[]
);
Insira 2 linhas básicas:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Veja a sintaxe do tipo de linha básico :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Veja a sintaxe de uma matriz de linhas :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Tudo que você precisa é colocar cada linha literal entre aspas duplas - o que é necessário apenas para desabilitar o significado especial da vírgula dentro de cada tipo de linha.
Aspas duplas adicionais (com escape) seriam ruído redundante enquanto não houvesse caracteres especiais adicionais.
Nada disso tem a ver com a
E
, como E'string\n'
. Mas não há nenhuma boa razão para fazer isso. db<>fiddle aqui
Antigo sqlfiddle
Resposta relacionada com mais explicações:
- Inserir texto com um único citações no PostgreSQL
- Como passar array de tipo personalizado para a função Postgres
- PL/pgSQL Matriz de linhas