sql >> Databáze >  >> RDS >> PostgreSQL

Správná syntaxe pole složeného typu

Dosavadní rady nejsou optimální. Existuje jednodušší řešení a skutečně použitelné vysvětlení.
Pokud si nejste jisti, požádejte Postgres, aby vám ukázal :

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

Vložte 2 základní řádky:

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

Podívejte se na syntaxi základního typu řádku :

SELECT p::text AS p_row FROM pencil_count p;

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

Podívejte se na syntaxi pole řádků :

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

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

Vše, co potřebujete, je uzavřít každý řádkový literál do dvojitých uvozovek – což je nutné pouze k deaktivaci speciálního významu čárky v každém typu řádku.
Dodatečné (escapované) dvojité uvozovky by byly nadbytečným šumem, protože by tam nebyly žádné další speciální znaky.

Nic z toho nemá nic společného se syntaxí únikového řetězce , který byl vypnut ve výchozím nastavení od Postgres 9.1. Syntaxi escape řetězce byste museli explicitně deklarovat předponou E , například E'string\n' . Ale není k tomu žádný dobrý důvod.

db<>fiddle zde
Starý sqlfiddle

Související odpověď s podrobnějším vysvětlením:



  1. Hrát si! framework - Nelze se připojit k databázi

  2. Vyberte objekt vytvořený mezi dvěma daty pomocí Bookshelf, MySQL, Knex na node.js

  3. Vytvořte spouštěč, který při aktualizaci sloupce vloží hodnoty do nové tabulky

  4. Použití TYPE =InnoDB v MySQL vyvolá výjimku