忽略 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