2015-09-19 76 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,视图定义如下。