Я не могу понять, как указать несколько команд для правила.
Согласно documentation, синтаксис для создания правила является:Правило с несколькими командами
CREATE [ OR REPLACE ] RULE name AS ON event
TO table [ WHERE condition ]
DO [ ALSO | INSTEAD ] { NOTHING | command | (command ; command ...) }
В соответствии с этим определением, я попытался создать следующее правило:
CREATE TABLE "test" (
"b" boolean NULL
);
-
CREATE OR REPLACE RULE test AS
ON UPDATE TO test DO INSTEAD
(
INSERT INTO test (b) SELECT FALSE;
INSERT INTO test (b) SELECT FALSE;
)
Однако, что происходит очень странно - этот запрос не может проанализировать первую вставку, жалующуюся на ошибку синтаксиса в конце ввода LINE 4: INSERT INTO test (b) SELECT FALSE, но в то же время выполняет остальную часть запроса, поэтому неправильно создает правило только с одной командой вставки.
Примечания: Моя версия 9.0, и я нигде не нашел ни одного примера правила с несколькими командами.
Итак, как правильно определить несколько команд для правила? Возможно ли это?
Пробовал ли вы использовать «обычную» вставку: 'insert into test (b) values (false);' вместо? –
Да, но это приводит к тому же: ** ОШИБКА: синтаксическая ошибка в конце ввода LINE 4: INSERT INTO test (b) ЦЕННОСТИ (ЛОЖЬ) ** – Webmut
Одна вещь: вы не прекратили действие 'create rule' с помощью ';'. Если я это сделаю, ваш код работает для меня (по крайней мере, в 'psql' - вам может потребоваться сообщить вашему SQL-клиенту, что оператор' create' является * единственным * оператором, а не тремя отдельными) –