在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
我一定是做错了什么,但我无法理解它。非常感谢您的专业知识。谢谢。
答案 0 :(得分:0)
我根本不是这方面的专家,但我遇到了同样的错误信息,在我的情况下,我可以通过删除规则的WHERE部分来解决这个问题。这将使规则更频繁地触发,但它为我解决了这个问题。如果它仍然相关,请查看它是否也适用于您。