СREATE RULE
Определение нового правила в таблице.
Синтаксис:
CREATE RULE правило AS ON событие ТО объект [ WHERE условие ] DO [ INSTEAD ] операция операция:: = NOTHING | query | (query [;…]) | [ query [:…] ]
Параметры:
- правило. Имя создаваемого правила.
- событие. Событие, при наступлении которого проверяется правило. Допустимыми значениями параметра являются SELECT, UPDATE, DELETE и INSERT.
- объект. Имя таблицы или уточненное имя поля (в формате таблица. поле).
- условие. Логическое выражение SQL, определяющее критерий применения правила. В условии не должны содержаться ссылки на другие таблицы, однако в нем могут присутствовать ссылки на специальные отношения new и old, которые соответственно представляют новые и существующие записи.
- INSTEAD. Ключевое слово INSTEAD означает, что заданная операция выполняется вместо события. Обычно операция выполняется перед наступлением события.
- операция. Запрос (или запросы), который определяет действия, выполняемые при наступлении указанного события. Возможно указание любых синтаксически правильных команд SELECT, UPDATE, DELETE и INSERT. Перечисляемые запросы заключаются в круглые скобки.
В параметрах условие и операция могут использоваться специальные отношения new и old, при помощи которых можно получить доступ к новым и старым значениям полей объекта, указанного в определении правила.
Отношение new доступно в правилах INSERT и UPDATE; в нем содержатся значения вставляемых или обновляемых полей. Отношение old доступно в правилах SELECT, UPDATE и DELETE; в нем содержатся данные существующих записей, участвующих в операции выборки, обновления или удаления.
Результаты:
CREATE. Это сообщение выдается при успешном создании нового правила.
Описание
Команда CREATE RULE создает в таблицах правила, предназначенные для выполнения альтернативных действий при вставке, обновлении и удалении данных. Система правил PostgreSQL также может использоваться при реализации представлений таблиц.
При выполнении команды SELECT, INSERT, DELETE и UPDATE автоматически производится поиск правил для этого события (порядок вызова правил не гарантирован). Если правило содержит секцию WHERE, проверяется указанное в ней условие, и если условие истинно – выполняется операция, заданная в определении правила. Если в определении правила присутствует ключевое слово INSTEAD, операция выполняется вместо обрабатываемого события; в противном случае она выполняется перед наступлением события. Будьте внимательны и избегайте циклических правил, то есть правил, в которых присутствуют ссылки на другие правила, которые, в свою очередь, ссылаются на исходное правило.
Примечание
При использовании правил ON SELECT ключевое слово INSTEAD является обязательным. Фактически это означает, что правила ON SELECT всегда обеспечивают правильную реализацию представлений таблиц.
Пример
В следующем фрагменте приведено определение правила sync_stock_with_editions, автоматически обновляющего поле isbn таблицы stock при модификации таблицы editions.
booktown=f CREATE RULE sync_stock_with_editions AS booktown-# ON UPDATE TO editions booktown-# DO UPDATE stock SET isbn = new.isbn booktown-# WHERE isbn = old.isbn; CREATE