insert
またはupdate
からテーブルを更新しようとしましたが、PostgreSQLのビューで呼び出します。ここで私は何をすべきかの簡単な例です:ここではトリガ&挿入プロシージャを使用してビューにデータを挿入するとき、「空白」挿入を避けるにはどうすればよいですか?
[Person] table:
id | lastname | firstname | city | age
[Person_View] table:
id | lastname | firstname | city
は、トリガおよび関連手順です:
CREATE TRIGGER tg_update_person_view
INSTEAD OF INSERT OR UPDATE OR DELETE ON
Person_View FOR EACH ROW EXECUTE PROCEDURE update_person_view_table();
CREATE OR REPLACE FUNCTION update_person_view_table()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $function$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO Person (id, lastname, firstname)
VALUES(NEW.id, NEW.lastname, NEW.firstname);
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
UPDATE Person
SET id=NEW.id, lastname=NEW.lastname, firstname=NEW.firstname
WHERE id=OLD.id;
RETURN NEW;
END IF;
RETURN NEW;
END;
$function$;
私が行う場合:
INSERT INTO Person_View (id, city) VALUES ('3', 'Berlin')
A IDのみの行がビューと親テーブルに追加されます。
値が挿入されている列にはプロシージャで定義された "マッピング"があり、マッピングされた列がない場合は続行されません。
を、単一のテーブルに基づいてビューが自動的に更新可能です。 – klin
私は、この単純化された例が自動的に更新可能であると言いました。私の実際の状況は、私は複数のテーブルに基づいてビューがあり、私はこれらの空のレコードが発生しないようにしています。 – kaycee