postgresql Postgres更新基表具有NOT NULL约束的视图

rjjhvcjd  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(160)

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”属性。
有没有办法做到这一点?

tktrz96b

tktrz96b1#

您的触发器函数在BEFORE触发器中是正确的,因为它修改了您要插入的行。但在INSTEAD OF触发器中则不正确:在这里,您必须自己在基表中执行INSERT

相关问题