2015-09-19 101 views
0

我目前使用的庫有一個錯誤,我試圖找到一個解決方法。是否有可能忽略PostgreSQL視圖插入的列?我有這樣的觀點:忽略PostgreSQL視圖上的列插入

CREATE VIEW schema.auth AS 
    SELECT email AS id, pass AS pass, 'onymous'::varchar AS rolname 
    FROM schema.person; 

圖書館正在努力做到以下幾點:

INSERT INTO schema.auth (id, pass, rolname) VALUES ('abc', '123', ''); 

圖書館不應該被設定rolname空字符串(''),因此錯誤。

有沒有辦法阻止PostgreSQL在rolname處拋出一個錯誤,然後悄悄丟棄空字符串?

+0

[Postgresql insert trigger to set value]的可能重複(http://stackoverflow.com/questions/16102188/postgresql-insert-trigger-to-set-value) – Bulat

+0

這是我的理解,觸發器不起作用這種觀點。 – Calebmer

+0

你試過了嗎? – Bulat

回答

0

這實際上很平凡。你要做的僅僅是傳播視圖上的INSERT對基礎表時,「忘記」 rolname

CREATE FUNCTION fix_lib_issue() RETURNS trigger AS $$ 
BEGIN 
    INSERT INTO schema.person (email, pass) 
    VALUES NEW.id, NEW.pass; 
    RETURN NEW; 
END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER tr_auth 
INSTEAD OF INSERT ON schema.auth 
FOR EACH ROW EXECUTE PROCEDURE fix_lib_issue(); 

當查詢插入後認爲,rolname將被設置爲onymous,視圖定義如下。