POSTGRESQL
(кастомные типы)
Студент: Плиев Константин Давидович
Преподаватель: Панкратов Александр Серафимович
РУДН
2022
Следует отметить, что:
Что ж, с какой-то точки зрения Postgresql может рассматривать сущности таблиц как составной тип, который можно рассматривать как объекты. В сочетании с массивом это может быть очень мощным
CREATE TYPE
CREATE TYPE регистрирует новый тип данных для использования в текущей базе данных. Владельцем типа становится создавший его пользователь.
Имя типа должно отличаться от имён любых других существующих типов или доменов в той же схеме. (А так как с таблицами связываются типы данных, имя типа должно также отличаться и от имён существующих таблиц в этой схеме.)
В этом примере создаётся составной тип, а затем он используется в определении функции:
В этом примере создаётся тип-перечисление, а затем он используется в определении таблицы:
Особенности CREATE TYPE
Массивы
PostgreSQL позволяет определять столбцы таблицы как многомерные массивы переменной длины. Элементами массивов могут быть любые встроенные или определённые пользователями базовые типы, перечисления, составные типы, типы-диапазоны или домены.
Чтобы проиллюстрировать использование массивов, мы создадим такую таблицу:
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
Можно вводить значения:
'{{1,2,3},{4,5,6},{7,8,9}}'
Можно ввести INSERT
INSERT INTO sal_emp
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {"training", "presentation"}}');
INSERT INTO sal_emp
VALUES ('Carol',
'{20000, 25000, 25000, 25000}',
'{{"breakfast", "consulting"}, {"meeting", "lunch"}}');
Продолжаем работать с массивами
В многомерных массивов число элементов в каждой размерности должно быть одинаковым; в противном случае возникает ошибка.
Результат двух предыдущих команд:
Кстати, у PostgreSQL своеобразная поддержка массивов в массиве. Почему?
Один общий ответ заключается в том, что массивы по своей сути являются антиреляционными. Удаление повторяющихся значений - это то, как вы достигаете 1-й нормальной формы. Повторить группы повторяющихся групп кажется совершенно безумным с реляционной теоретической точки зрения.
Подробнее о составных типах
Составной тип данных – это тип данных, который включает структуру данных, состоящую из нескольких имен полей и соответствующих типов данных.
Чтобы использовать составной тип данных, например, для создания столбца составного типа, необходимо предварительно создать составной тип данных с нужной структурой.
Это можно сделать с помощью графического инструмента pgAdmin 4 или с помощью выполнения инструкций языка SQL.
Представим, что нам необходимо создать таблицу (products), в которой нужно хранить товары, при этом каждый товар имеет определённый тип. В свою очередь этот тип товара имеет два свойства:
Графически:
Создание составного типа с помощью SQL
На SQL составной тип данных создается достаточно просто, для этого используется команда CREATE TYPE.
Чтобы создать точно такой же составной тип данных, который мы создали чуть ранее, мы можем использовать следующую SQL инструкцию, которую необходимо выполнить в редакторе SQL запросов (Запросник) в контексте нужной базы данных.
Составной тип данных теперь у нас есть и мы можем его использовать, например, указать в качестве типа данных у столбца при создании таблицы.
CREATE TABLE products (
id INT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(100) NOT NULL,
type product_type NOT NULL,
price NUMERIC(18,2) NULL
);