2013-11-26 2 views
2

Я не могу понять, как указать несколько команд для правила.
Согласно 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, и я нигде не нашел ни одного примера правила с несколькими командами.

Итак, как правильно определить несколько команд для правила? Возможно ли это?

+0

Пробовал ли вы использовать «обычную» вставку: 'insert into test (b) values ​​(false);' вместо? –

+0

Да, но это приводит к тому же: ** ОШИБКА: синтаксическая ошибка в конце ввода LINE 4: INSERT INTO test (b) ЦЕННОСТИ (ЛОЖЬ) ** – Webmut

+1

Одна вещь: вы не прекратили действие 'create rule' с помощью ';'. Если я это сделаю, ваш код работает для меня (по крайней мере, в 'psql' - вам может потребоваться сообщить вашему SQL-клиенту, что оператор' create' является * единственным * оператором, а не тремя отдельными) –

ответ

1

Согласно комментариям, проблема кроется в инструменте управления базами данных, который я использовал - Adminer.
Это как-то разрезает/искажает запрос, поэтому вы не можете создать более одной команды в правиле.

Обратите внимание, что эта ошибка присутствует даже в (на данный момент) последней версии 3.7.1.

Спасибо a_horse_with_no_name за помощь в решении этой проблемы.

Смежные вопросы