PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Sintaxe correta para array do tipo composto


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 sintaxe da string de escape , que foi desativado por padrão desde o Postgres 9.1. Você teria que declarar a sintaxe da string de escape explicitamente prefixando 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: