Статья основана на тринадцатом видео из 31 темы курса SQL 2.0 — PL/pgSQL в PostgreSQL от Аристова Евгения, который является логическим продолжением курса SQL c 0. Ссылки на видео на платформах RUTUBE и VK video.
В данной статье подробно разбираются использование, переопределение операторов, их ключевые преимущества и ограничения.
В прошлой статье мы разобрали составные типы данных и их ограничения, вычисляемые поля и их минусы.
Презентация и исходники доступны по ссылке.
Переопределение оператора
Переопределение операторов в PostgreSQL — это мощный механизм, позволяющий изменять поведение стандартных операторов (+, -, =, >, < и др.) для пользовательских типов данных. Это особенно полезно при работе с сложными структурами данных.
Создадим тип для комплексных чисел:
CREATE TYPE complex AS (
real DOUBLE PRECISION,
imag DOUBLE PRECISION
);
Напишем функцию сложения двух комплексных чисел:
CREATE FUNCTION complex_add(complex, complex)
RETURNS complex AS $$
BEGIN
RETURN ROW(
$1.real + $2.real,
$1.imag + $2.imag
)::complex;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
Создаем кастомный оператор + и связываем с ним функцию:
CREATE OPERATOR + (
LEFTARG = complex,
RIGHTARG = complex,
PROCEDURE = complex_add,
COMMUTATOR = +
);
Теперь можно использовать оператор сложения в просто sql для нашего составного типа:
SELECT ROW(3, 4)::complex + ROW(1, 2)::complex;
Операторы. Ключевые преимущества
- Естественный синтаксис — a + b вместо явного вызова функции complex_add(a, b)
- Интеграция с SQL — работают в WHERE, ORDER BY, JOIN
- Поддержка индексов — через классы операторов
- Полиморфизм — один оператор для разных типов (17 тема)
- Оптимизация — планировщик учитывает пользовательские операторы.
Ограничения
- Нельзя переопределить встроенные операторы для базовых типов
- Требует тщательного тестирования
- Может усложнить понимание кода
Больше примеров доступно на гитхабе и в видео.
В следующей статье мы разберём входных и выходных параметров, передачу массива.
Добавить комментарий