【发布时间】:2019-02-07 08:47:11
【问题描述】:
我正在尝试为我的数据库创建一些规则以防止重复插入,但由于我们也处于休眠状态,因此 .save() 被称为 insert xxx RETURNING *
我似乎无法让插入规则在插入返回时很好地发挥作用。
CREATE TABLE test ( aaa int, bbb int);
insert into test VALUES(1, 2);
CREATE RULE "testRule1" AS ON INSERT TO test
WHERE EXISTS(SELECT 1 FROM test
WHERE (aaa, bbb)=(NEW.aaa, NEW.bbb))
DO INSTEAD NOTHING;
如果我尝试仅使用 1 条条件规则插入
insert into test VALUES(1, 2);
ERROR: cannot perform INSERT RETURNING on relation "test"
HINT: You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.
CREATE RULE "testRule2" AS ON INSERT TO test
DO INSTEAD INSERT INTO test VALUES(new.*)
RETURNING test.*;
如果我尝试同时使用条件规则和无条件规则插入
insert into test VALUES(1, 2);
ERROR: infinite recursion detected in rules for relation "test"
我的设置无法实现吗?
【问题讨论】:
标签: postgresql hibernate