2013-11-26 49 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; 
) 

但是,发生的事情非常奇怪 - 此查询无法解析第一个插入语句时抱怨语法错误在输入结束处行4:INSERT INTO测试(b)SELECT FALSE,但同时执行查询的其余部分,因此不正确地使用一个插入命令创建规则。

注意:我的版本是9.0,我还没有找到任何地方的多命令规则的一个例子。

那么,如何正确定义一条规则的多个命令呢?它甚至有可能吗?

+0

您是否尝试使用“常规”插入:'插入测试(b)值(false);'而不是? –

+0

是的,但结果完全一样:**错误:输入结束时的语法错误第4行:INSERT INTO测试(b)VALUES(FALSE)** – Webmut

+1

有一件事:您没有终止“创建规则”带有';'的语句。如果我这样做,你的代码适用于我(至少在'psql'中 - 你可能需要告诉你的SQL客户端'create'语句是一个* single *语句而不是三个单独的语句) –

回答

1

根据意见,问题出在我使用的数据库管理工具 - Adminer
它以某种方式切片/损坏查询,因此您不能在规则中创建多个命令。

请注意,即使在(截至目前)最新版本3.7.1中也存在此错误。

感谢a_horse_with_no_name帮助我解决此问题。