对于jsonb的ON UPDATE规则

时间:2016-02-29 23:57:48

标签: postgresql jsonb

在PostgreSQL 9.5.1数据库中,我有一个表:

CREATE TABLE test.table01 ( pgid serial NOT NULL, sample_id text NOT NULL, all_data jsonb NOT NULL, CONSTRAINT table01_pkey PRIMARY KEY (pgid) )

对该表的看法:

CREATE OR REPLACE VIEW test.test_view AS SELECT table01.sample_id, table01.all_data ->> 'technician'::text AS technician, table01.all_data ->> 'depth'::text AS depth, table01.all_data ->> 'colour'::text AS colour, table01.all_data ->> 'duplicate of'::text AS dupe_of FROM test.table01;

最后,在该视图中,我创建了一个RULE,旨在针对视图正确修改更新的基础jsonb对象:

CREATE OR REPLACE RULE upd_test_view AS ON UPDATE TO test.test_view WHERE new.colour <> old.colour DO INSTEAD UPDATE test.table01 SET all_data = jsonb_set(table01.all_data, '{colour}'::text[], (('"'::text || new.colour) || '"'::text)::jsonb);

我随后发出

UPDATE test.test_view SET colour = 'Purple' WHERE sample_id = '1234567';

我回来了

ERROR: no relation entry for relid 2 ********** Error ********** ERROR: no relation entry for relid 2 SQL state: XX000

我一定是做错了什么,但我无法理解它。非常感谢您的专业知识。谢谢。

1 个答案:

答案 0 :(得分:0)

我根本不是这方面的专家,但我遇到了同样的错误信息,在我的情况下,我可以通过删除规则的WHERE部分来解决这个问题。这将使规则更频繁地触发,但它为我解决了这个问题。如果它仍然相关,请查看它是否也适用于您。