sql >> Database teknologi >  >> RDS >> PostgreSQL

Korrekt syntaks for array af sammensat type

Rådgivningen er indtil videre ikke optimal. Der er en enklere løsning og en faktisk anvendelig forklaring.
Når du er i tvivl, beder du bare Postgres om at vise 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[]
);

Indsæt 2 grundlæggende rækker:

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

Se syntaksen for den grundlæggende rækketype :

SELECT p::text AS p_row FROM pencil_count p;

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

Se syntaksen for en matrix af rækker :

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

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

Alt du behøver er at omslutte hver række bogstaver i dobbelte anførselstegn - hvilket kun er nødvendigt for at deaktivere den særlige betydning af kommaet inden for hver rækketype.
Yderligere (undgåede) dobbelte anførselstegn ville være redundant støj, mens der ikke er yderligere specialtegn.

Intet af dette har noget at gøre med escape-strengsyntaks , som er blevet fra som standard siden Postgres 9.1. Du bliver nødt til at erklære escape-strengsyntaks eksplicit ved at sætte præfikset E , som E'string\n' . Men der er ingen god grund til at gøre det.

db<>fiddle her
Gamle sqlfiddle

Relateret svar med mere forklaring:



  1. MySql WorkBench AES 256-dekryptering

  2. Hvordan viser jeg alle tabeller i et skema i Oracle SQL?

  3. Oracle 11g omdøb. Garanteret at være atomare?

  4. Vil du slette alle poster undtagen den seneste?