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



我有一个函数与视图上的触发器相连。视图链接到"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

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

所以,除非你也可能在其他地方单独更新这些字段,并且不想覆盖它们的新值,否则就把它们全部设置好,不用担心。


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

最新更新