忽略 PostgreSQL 视图插入中的列
Ignore column on PostgreSQL view insert
我目前使用的一个库有一个错误,我正在尝试寻找解决方法。是否可以忽略 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
处抛出错误并悄悄丢弃空字符串?
这其实很琐碎。当将视图上的 INSERT
传播到基础表时,您所做的只是 "forget" 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
。
我目前使用的一个库有一个错误,我正在尝试寻找解决方法。是否可以忽略 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
处抛出错误并悄悄丢弃空字符串?
这其实很琐碎。当将视图上的 INSERT
传播到基础表时,您所做的只是 "forget" 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
。