无法使用触发器功能将新行插入视图

时间:2017-08-16 08:31:28

标签: postgresql triggers insert

我目前正在插入此数据{"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

那么我为什么不能插入新行呢?

2 个答案:

答案 0 :(得分:0)

https://www.postgresql.org/docs/current/static/sql-createview.html

  

视图没有物理实现。而是运行查询   每次在查询中引用视图时。

因此您无法通过定义

插入视图

答案 1 :(得分:0)

您是否创建了BEFORE INSERT触发器?

我相信你应该创建你的触发器“INSTEAD OF INSERT”,这样postgres就不会尝试插入到视图中,这将失败。