Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.
Одним из принципов реляционной модели является то, что атрибуты
отношения атомарны. Postgres не имеет этого ограничения; атрибуты могут сами содержать
под-значения, которые могут быть доступны из языка запросов.
Например, можно создать атрибут, который является массивом базового типа.
Postgres разрешает атрибуты экземпляров определяемые как многомерные массивы
постоянной или переменной длины.
Можно создавать массивы любого базового типа или типа определенного
пользователем. Чтобы проиллюстрировать их использование, сначала создадим
класс с массивами базовых типов.
Запрос выше создает класс SAL_EMP с text строкой (name), одномерным массивом int4 (pay_by_quarter), который представляет из себя зарплату
рабочему за квартал и двумерный массив text (schedule), который представляет из себя задание рабочему на неделю.
Теперь мы выполним несколько вставок INSERTS; заметим, что при добавлении в массив, мы заключаем
значения в скобки и разделяем их запятыми. Если ты знаешь язык C, то это похоже на синтаксис при инициализации структур.
По умолчанию, Postgres использует "начало с единицы" соглашение о нумерации
-- то есть, массив из n элементов
начинается с array[1] и заканчивается array[n].
Теперь, мы можем выполнить несколько запросов к SAL_EMP. Во-первых, мы
покажем как получить доступ к элементам массива по одному.
Этот запрос возвращает имена рабочих, оплата которых изменилась
во втором квартале:
SELECT name
FROM SAL_EMP
WHERE SAL_EMP.pay_by_quarter[1] <>
SAL_EMP.pay_by_quarter[2];
+------+
|name |
+------+
|Carol |
+------+
Этот запрос возвращает зарплату рабочих в третьем квартале: