sql >> Base de Datos >  >> RDS >> PostgreSQL

Sintaxis correcta para matriz de tipo compuesto

Los consejos hasta ahora no son óptimos. Hay una solución más simple y una explicación realmente aplicable.
En caso de duda, simplemente pídale a Postgres que le muestre :

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[]
);

Inserta 2 filas básicas:

INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);

Consulte la sintaxis del tipo de fila básico :

SELECT p::text AS p_row FROM pencil_count p;

  p_row
----------
 (red,1)
 (blue,2)

Ver la sintaxis de una matriz de filas :

SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;

       p_row_arr
------------------------
 {"(red,1)","(blue,2)"}

Todo lo que necesita es encerrar cada fila literal entre comillas dobles, lo que solo es necesario para deshabilitar el significado especial de la coma dentro de cada tipo de fila.
Las comillas dobles adicionales (con escape) serían ruido redundante mientras no haya caracteres especiales adicionales.

Nada de esto tiene nada que ver con sintaxis de cadenas de escape , que se ha desactivado por defecto desde Postgres 9.1. Tendría que declarar la sintaxis de cadena de escape explícitamente anteponiendo E , como E'string\n' . Pero no hay una buena razón para hacerlo.

db<>fiddle aquí
Antiguo sqlfiddle

Respuesta relacionada con más explicación: