PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Poprawna składnia tablicy typu złożonego

Jak dotąd porady nie są optymalne. Istnieje prostsze rozwiązanie i faktycznie odpowiednie wyjaśnienie.
W razie wątpliwości poproś Postgres, aby Ci pokazał :

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

Wstaw 2 podstawowe rzędy:

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

Zobacz składnię podstawowego typu wiersza :

SELECT p::text AS p_row FROM pencil_count p;

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

Zobacz składnię tablicy wierszy :

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

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

Wszystko, czego potrzebujesz, to ujęcie każdego literału wiersza w podwójnych cudzysłowach — co jest konieczne tylko do wyłączenia specjalnego znaczenia przecinka w każdym typie wiersza.
Dodatkowe (unieważnione) podwójne cudzysłowy byłyby nadmiarowym szumem, podczas gdy nie ma żadnych dodatkowych znaków specjalnych.

Nic z tego nie ma nic wspólnego ze składnią ciągu znaków ucieczki , który został wyłączony domyślnie od Postgres 9.1. Musiałbyś jawnie zadeklarować składnię łańcucha ucieczki przez przedrostek E , jak E'string\n' . Ale nie ma ku temu dobrego powodu.

db<>fiddle tutaj
Stary sqlfiddle

Powiązana odpowiedź z dodatkowym wyjaśnieniem:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie PostgreSQL przechowuje pliki konfiguracyjne/konfiguracyjne?

  2. postgresql-sortuj tablicę według słów w każdym z elementów

  3. Napisz szybką ramkę danych pandy do postgres

  4. Interpretacja wyników analizy wyjaśniania w Postgres

  5. Jak zabezpieczyć się przed iniekcją SQL, gdy klauzula WHERE jest budowana dynamicznie z formularza wyszukiwania?