PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Syntaxe correcte pour tableau de type composite

Les conseils jusqu'à présent ne sont pas optimaux. Il existe une solution plus simple et une explication réellement applicable.
En cas de doute, demandez simplement à Postgres de vous montrer :

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

Insérez 2 lignes de base :

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

Voir la syntaxe du type de ligne de base :

SELECT p::text AS p_row FROM pencil_count p;

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

Voir la syntaxe d'un tableau de lignes :

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

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

Tout ce dont vous avez besoin est de placer chaque littéral de ligne entre guillemets - ce qui est uniquement nécessaire pour désactiver la signification spéciale de la virgule dans chaque type de ligne.
Des guillemets supplémentaires (échappés) seraient du bruit redondant alors qu'il n'y a pas de caractères spéciaux supplémentaires.

Rien de tout cela n'a rien à voir avec la syntaxe de la chaîne d'échappement , qui a été désactivé par défaut depuis Postgres 9.1. Vous devrez déclarer explicitement la syntaxe de la chaîne d'échappement en préfixant E , comme E'string\n' . Mais il n'y a aucune bonne raison de le faire.

db<>violon ici
Ancien sqlfiddle

Réponse connexe avec plus d'explications :