Sql 在postgres规则中使用变量
在postgres规则()中,是否可以使用变量?例如,如果在规则中我这样做Sql 在postgres规则中使用变量,sql,postgresql,sql-insert,Sql,Postgresql,Sql Insert,在postgres规则()中,是否可以使用变量?例如,如果在规则中我这样做 CREATE RULE "_RETURN" AS ON INSERT TO t1 DO INSTEAD INSERT INTO t1 (id, a) VALUES (uuid_generate_v4(), new.a) INSERT INTO t4 (id) VALUES (??????) 我可以在第一次插入中将uuid\u generate\u v4()的值设置为变量,
CREATE RULE "_RETURN" AS
ON INSERT TO t1
DO INSTEAD
INSERT INTO t1 (id, a) VALUES (uuid_generate_v4(), new.a)
INSERT INTO t4 (id) VALUES (??????)
我可以在第一次插入中将uuid\u generate\u v4()
的值设置为变量,以便在第二次插入中使用它吗?或者有没有办法从第一次插入中获取generate id,以便在第二次插入中使用
另外,我在关系的规则中检测到一个错误无限递归。可能是因为该规则适用于表t1,但它包含要插入到t1中的语句。我怎样才能做到这一点
我还得到了一个错误无限递归检测到的规则
关系可能是因为该规则适用于表t1,但它包含
要插入t1的语句。我怎样才能做到这一点
它不能工作。
见文件:
从规则操作生成的查询树被抛出到
再次重写系统,可能会应用更多的规则,从而导致
或多或少的查询树因此规则的操作必须具有
与规则不同的命令类型或不同的结果关系
它本身是打开的,否则这个递归过程将以
无限循环。(将检测到规则的递归扩展并
报告为错误。)
换句话说,在插入到t1的规则中,不能向同一个表触发另一个INSERT
,因为这会导致该规则将一次又一次地递归触发,并且会导致错误。
您需要使用触发器来执行此任务。我认为您可能可以使用触发器来选择uuid值并在insert中引用它,尽管可能还有其他方法。此外,您的递归很可能来自这样一个事实:在每次插入t1
时,您都会创建一个规则,执行插入t1
的操作,再次触发该规则。除了规则递归之外,插入t1(id,a)值(uuid\u generate\u v4(),new.a)的行应该插入t1(id,a)值(uuid\u generate\u v4(),new.a)返回id以获取uuid\u generate\u v4值