使用触发器和函数更新我在update子句上设置的字段

时间:2015-10-06 14:52:21

标签: postgresql triggers sql-update sql-view

我有一个与视图上的触发器连接的功能。视图与" my_table"相关联和其他表。我想通过该功能更新该表。我有4个字段。但是,如果我只更新一个字段,例如contact_name,那该怎么办?如何将该字段放在SET语句而不是4个字段中,如下例所示:

CREATE OR REPLACE FUNCTION my_function()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $function$
BEGIN
    UPDATE my_table
                SET
                    identifier = NEW.identifier,
                    contact_name = NEW.contact_name,
                    contact_phone_number = NEW.contact_phone_number,
                    repair_date = NEW.repair_date,
                WHERE id=OLD.id;
            RETURN NEW;
END

1 个答案:

答案 0 :(得分:1)

您需要使用动态SQL。但没关系。如果更新表,则所有 1 的字段都会被数据库复制到新行,即使您没有明确指定它们。

因此,除非您也可以在其他地方单独更新这些字段,并且不想覆盖它们的新值,只需将它们全部设置即可,不要担心它。

1 嗯,除了在TOAST表中存储的未更改字段