PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Правилен синтаксис за масив от съставен тип

Досегашните съвети не са оптимални. Има по-просто решение и действително приложимо обяснение.
Когато се съмнявате, просто помолете Postgres да ви покаже :

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

Вмъкнете 2 основни реда:

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

Вижте синтаксиса за основния тип ред :

SELECT p::text AS p_row FROM pencil_count p;

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

Вижте синтаксиса за масив от редове :

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

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

Всичко, от което се нуждаете, е да оградите всеки литерал на ред в двойни кавички - което е необходимо само за деактивиране на специалното значение на запетая във всеки тип ред.
Допълнителните (екранирани) двойни кавички биха били излишен шум, докато няма допълнителни специални знаци.

Нищо от това няма нищо общо със синтаксиса на екраниращия низ , който е изключен по подразбиране от Postgres 9.1. Ще трябва изрично да декларирате синтаксиса на екраниращия низ чрез префикс E , като E'string\n' . Но няма основателна причина да го правите.

db<>fiddle тук
Стар sqlfiddle

Свързан отговор с повече обяснения:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Някой имал ли е успех с използването на конкретен локал за база данни на PostgreSQL, така че сравнението на текст да не прави разлика между главни и малки букви?

  2. Как можем да накараме „statement_timeout“ да работи вътре във функция?

  3. Как да групирате по седмица в postgresql

  4. Върнете се към readline версия 6.x в Homebrew, за да коригирате Postgresql?

  5. Сравнителен анализ, управлявани PostgreSQL облачни решения – част четвърта:Microsoft Azure