Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在postgres规则中使用变量_Sql_Postgresql_Sql Insert - Fatal编程技术网

Sql 在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()的值设置为变量,

在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()
的值设置为变量,以便在第二次插入中使用它吗?或者有没有办法从第一次插入中获取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值