2017-08-16 3 views
0

現在、このデータをビューに追加しています。{"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

ビューに挿入することはできません。ビューはROオブジェクトです。基本的にビューは単なる選択ルールです。それだけが選択されます - データを保持しません –

答えて

0

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

ビューは、物理的に実体化されていません。代わりに、照会で照会が参照されるたびに、照会は で実行されます。

あなたはBEFORE INSERTトリガーを作成しましたので、あなたは、定義ビューに

+0

本当に元のテーブルに実際に挿入したいのですが?私は同じエラーが発生しているので –

+0

data.tblに挿入すると同じエラーで失敗しますか?.. OPのかなりのmessangeをしてください –

0

を挿入することはできませんか?

私はあなたがトリガを "INSERT"のように作成する必要があると信じています。この方法では、postgresはビューに挿入しようとせず、失敗します。

関連する問題