我目前正在插入此数据{"curr": "testcurr","nm": "testnm"}
一个观点。
然后运行触发器功能以插入到原始表中。
我从触发器功能中收到错误cannot insert into column "curr" of view "tblview"
。
以下是我的代码部分:
IF (tg_op = 'INSERT') THEN
NEW."dat"= jsonb_build_object("curr",NEW.'curr','symb',NEW."symb");
NEW."ct"=now();
INSERT INTO data.tbl
(
"nm",
"dat",
"ct",
)
VALUES
(
NEW."nm",
NEW."dat"
NEW."ct"
)returning "id" into NEW.id;
END
以下是我的观点:
CREATE OR REPLACE VIEW data.tblview AS
SELECT gn.id,
gn.nm,
((gn.dat ->> 'curr'::text))::character varying(64) AS curr,
((gn.dat ->> 'symb'::text))::character varying(64) AS symb,
gn.ct
FROM data.gn
那么我为什么不能插入新行呢?
答案 0 :(得分:0)
https://www.postgresql.org/docs/current/static/sql-createview.html
视图没有物理实现。而是运行查询 每次在查询中引用视图时。
因此您无法通过定义
插入视图答案 1 :(得分:0)
您是否创建了BEFORE INSERT触发器?
我相信你应该创建你的触发器“INSTEAD OF INSERT”,这样postgres就不会尝试插入到视图中,这将失败。