![]() |
![]() |
![]() |
СREATE RULE Определение нового правила в таблице. Синтаксис CREATE RULE правило AS ON событие ТО объект [ WHERE условие ] DO [ INSTEAD ] операция операция ::= NOTHING | query | ( query [; ...] ) | [ query [: ...] ] Параметры
В параметрах условие и операция могут использоваться специальные отношения 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 |
![]() |
![]() |
![]() |