在postgres规则(https://www.postgresql.org/docs/current/static/sql-createrule.html)中,是否可以使用变量?例如,如果我在规则中
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 (??????)
我可以以某种方式将第一个INSERT中uuid_generate_v4()
的值设置为变量,以便我可以在第二个INSERT中使用它吗?或者有没有办法从第一个INSERT中获取生成id,以便在第二个中使用它?
我也收到错误infinite recursion detected in rules for relation
。可能是因为规则是针对表t1但它包含要插入到t1的语句。我怎样才能做到这一点?
答案 0 :(得分:0)
此外,我在规则中检测到错误无限递归 关系。可能是因为规则是针对表t1但它包含一个 要插入到t1的语句。我该如何开展这项工作
无法正常工作 请参阅文档:39.4. Rules on INSERT, UPDATE, and DELETE
从规则操作生成的查询树被抛入 再次重写系统,可能会有更多的规则被应用 或多或少的查询树。 所以规则的行动必须要么a 与规则不同的命令类型或不同的结果关系 本身是打开的,否则这个递归过程将最终出现在 无限循环。(将检测到规则的递归扩展 报告为错误。)
换句话说,在规则ON INSERT TO t1
中,您无法将另一个insert
发送到同一个表t1
,因为这会导致规则将再次以递归方式触发,再次 - 这将导致错误。
您需要使用触发器完成此任务。