sql >> Database >  >> RDS >> PostgreSQL

Correcte syntaxis voor array van samengesteld type

Advies tot nu toe is niet optimaal. Er is een eenvoudigere oplossing en een daadwerkelijk toepasbare uitleg.
Bij twijfel vraag Postgres gewoon om het je te laten zien :

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

Voeg 2 basisrijen in:

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

Zie de syntaxis voor het basistype rij :

SELECT p::text AS p_row FROM pencil_count p;

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

Bekijk de syntaxis voor een array van rijen :

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

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

Het enige dat u nodig hebt, is om elke letterlijke rij tussen dubbele aanhalingstekens te plaatsen - wat alleen nodig is om de speciale betekenis van de komma uit te schakelen binnen elk rijtype.
Extra (escape) dubbele aanhalingstekens zouden overbodige ruis zijn, terwijl er geen extra speciale tekens zijn.

Dit heeft niets te maken met escape string syntax , die uit is uitgeschakeld standaard sinds Postgres 9.1. U zou de syntaxis van de escape-tekenreeks expliciet moeten declareren door E . voor te voegen , zoals E'string\n' . Maar er is geen goede reden om dat te doen.

db<>fiddle hier
Oude sqlfiddle

Gerelateerd antwoord met meer uitleg:



  1. Kan niet inloggen op SQL Server + SQL Server-verificatie + fout:18456

  2. Django-queryexpressie voor berekende velden waarvoor voorwaarden en casting zijn vereist

  3. Wat gebeurt er bij het gebruik van meerdere CASE ... WHEN-instructies in dezelfde SQL-query?

  4. MySQL zijn mijn indexen goed?