PostgreSQL 10.22版本
假设我有一个表及其视图,例如:
CREATE TABLE item
(
id integer Not Null,
name varchar(50) Not Null
);
CREATE OR REPLACE VIEW all_items AS(
SELECT i.id
FROM item i
)
WITH CHECK OPTION
当我尝试将元组插入到all_items视图时,由于基表上的'Not Null'约束,出现错误。例如:
第一次
我尝试使用触发器来使其工作,但它没有:
CREATE OR REPLACE FUNCTION fill_NULL_attributes()
RETURNS trigger AS $$
BEGIN
IF NEW.name IS NULL THEN
NEW.name := 'X'; -- fills empty attribute with some value
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql
CREATE TRIGGER all_items_insert_fix
INSTEAD OF INSERT ON all_items
FOR EACH ROW
EXECUTE PROCEDURE fill_NULL_attributes();
此触发器解决方案不起作用,因为NEW没有“name”属性。
有没有办法做到这一点?
1条答案
按热度按时间tktrz96b1#
您的触发器函数在
BEFORE
触发器中是正确的,因为它修改了您要插入的行。但在INSTEAD OF
触发器中则不正确:在这里,您必须自己在基表中执行INSERT
。