sql >> Databasteknik >  >> RDS >> PostgreSQL

Korrekt syntax för array av sammansatt typ

Råden hittills är inte optimala. Det finns en enklare lösning och en faktiskt tillämplig förklaring.
När du är osäker, be bara Postgres visa dig :

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

Infoga 2 grundläggande rader:

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

Se syntaxen för den grundläggande radtypen :

SELECT p::text AS p_row FROM pencil_count p;

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

Se syntaxen för en array av rader :

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

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

Allt du behöver är att omge varje rad bokstavligen med dubbla citattecken - vilket bara är nödvändigt för att inaktivera den speciella betydelsen av komma inom varje radtyp.
Ytterligare (escaped) dubbla citattecken skulle vara redundant brus medan det inte finns några extra specialtecken.

Inget av detta har något att göra med escape-strängsyntax , som har stängts av av som standard sedan Postgres 9.1. Du måste explicit deklarera escape-strängsyntax genom att prefixet E , som E'string\n' . Men det finns ingen bra anledning att göra det.

db<>fiol här
Gammal sqlfiddle

Relaterat svar med mer förklaring:



  1. Fel:ER_WRONG_VALUE_COUNT_ON_ROW:Kolumnantal matchar inte värderäkning på rad 1

  2. Hur kan jag VÄLJA flera värden från 5 tabeller?

  3. Skapar MySQL Workbench automatiskt index för främmande nycklar?

  4. Lista över Datetime Format Elements i Oracle