Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Определяет новые правила перезаписи.
CREATE [OR REPLACE] RULE name AS ON event
TO table_name [WHERE condition]
DO [ALSO | INSTEAD] { NOTHING | command | (command; command
...) }
CREATE RULE определяет новые правила, применяемые к указанной таблице или представлению. CREATE OR REPLACE RULE создаёт новое правило или заменяет существующее правило с тем же именем для той же таблицы.
Система правил YMatrix позволяет определить дополнительную операцию, которая выполняется при вставке, обновлении или удалении данных в таблицах базы данных. Когда выполняется заданная команда над указанной таблицей, правило приводит к выполнению дополнительных или альтернативных команд. Правило INSTEAD может заменить заданную команду другой командой или вообще предотвратить выполнение исходной команды. Правила также могут использоваться для реализации SQL-представлений. Важно понимать, что правила на самом деле являются механизмами преобразования команд или макросами команд. Преобразование происходит до начала выполнения команды. Оно не выполняется отдельно для каждой физической строки, как триггер.
Правило ON SELECT должно быть безусловным правилом INSTEAD и содержать операцию, состоящую из одной команды SELECT. Таким образом, правило ON SELECT фактически превращает таблицу в представление, и её видимое содержимое — это строки, возвращаемые командой SELECT правила, а не данные, хранящиеся в самой таблице (если таковые имеются). Использование команды CREATE VIEW считается более правильным подходом, чем создание реальной таблицы с определением правила ON SELECT для неё.
Вы можете создать иллюзию возможности обновления представлений, определив правила ON INSERT, ON UPDATE и ON DELETE, которые заменяют операции обновления над представлением соответствующими операциями над другими таблицами. Если вы хотите поддерживать конструкции вроде INSERT RETURNING и т.п., убедитесь, что каждое правило содержит соответствующее предложение RETURNING.
Если вы пытаетесь использовать условные правила для обновления представлений, существует ловушка: чтобы разрешить все операции над представлением, вы должны иметь безусловное правило INSTEAD. Если правило является условным или не имеет модификатора INSTEAD, система всё равно будет отклонять попытки выполнения операций обновления, поскольку считает, что в некоторых случаях может потребоваться выполнить операцию над виртуальной таблицей представления. Если вы хотите охватить все полезные случаи в условных правилах, добавьте безусловное правило DO INSTEAD NOTHING, чтобы гарантировать, что система поймёт: она никогда не будет вызвана для обновления виртуальной таблицы. Затем установите условные правила как не-INSTEAD; если они будут применены, они просто добавятся к операции по умолчанию INSTEAD NOTHING. (Однако этот метод в настоящее время не применим для поддержки запросов с RETURNING.)
name
event
table_name
condition
INSTEAD
ALSO
Command
Вы должны быть владельцем таблицы, чтобы создавать или изменять правила для этой таблицы.
Особое внимание следует уделять предотвращению зацикливания правил. Рекурсивные правила не проверяются во время создания, но при их выполнении будет выдана ошибка.
Создайте правило, которое при попытке пользователя вставить строки в родительскую таблицу rank секционированной таблицы, будет вставлять строки в дочернюю таблицу b2001:
CREATE RULE b2001 AS ON INSERT TO rank WHERE gender='M' and
year='2001' DO INSTEAD INSERT INTO b2001 VALUES (NEW.id,
NEW.rank, NEW.year, NEW.gender, NEW.count);
CREATE RULE является расширением языка YMatrix, как и вся система перезаписи запросов.