在一個PostgreSQL 9.5.1數據庫,我有一個表:ON UPDATE規則jsonb
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;
最後,在該視圖,我創建了一個規則,旨在正確修改底層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
我必須做一些錯誤的,但我不能完全得到我的頭周圍。非常感謝您的專業知識。謝謝。
我不熟悉json函數,但是你的問題可能就是'sample_id'字段沒有被定義爲原始表中的唯一鍵。你可以使用'pgid'嗎?或者,如果'sample_id'是唯一的,請爲其添加密鑰。 – OscarJ
你不需要在'UPDATE test.table01'的某個地方設置'WHERE' SET all_data = jsonb_set(table01.all_data,'{color}':: text [],((''':: text || new。 color)||'「':: text):: jsonb);'? – OcuS
吞,是的,絕對。 – Joebocop