在CREATE RULE的WHERE子句中访问旧值和新值

时间:2017-06-08 15:00:58

标签: sql postgresql

我正在尝试合并两个转储文件,如this回答中所述。在创建规则时,我一直在尝试访问OLD表的NEWaccount值时遇到问题。

account架构只是一个表格,其中包含一个名为jsonb的{​​{1}}类型的列。 value列中有两个字段,我想要创建value规则。以下是我尝试的最新查询和随后的回复:

skip_unique

我尝试了相同的一般查询的多种排列,包括:

CREATE OR REPLACE RULE skip_unique AS ON INSERT TO account WHERE NEW.value->>'opCo' = OLD.value->>'opCo' AND NEW.value->>'customerId' = OLD.value->>'customerId' DO INSTEAD NOTHING;

ERROR:  invalid reference to FROM-clause entry for table "old"
LINE 1: ...S ON INSERT TO account WHERE NEW.value->>'opCo' = OLD.value-...
                                                             ^
HINT:  There is an entry for table "old", but it cannot be referenced from this part of the query.

他们都没有因各种原因而工作。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

INSERT触发器上没有OLD变量(或者它是未分配的)。毕竟,通过INSERT,您可以插入新内容,那么您期望OLD持有什么?

  

OLD

     

数据类型记录;保存旧数据库行的变量   行级触发器中的UPDATE / DELETE操作。这个变量是   在语句级触发器和INSERT操作中取消分配。

https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

您应该在表中寻找值而不是OLD。