有没有一种方法可以强制更新查询在PostgreSQL中设置列的值?

3
我有一张表格,其中有一个列id_user_update用于保存插入/更新行的用户id。我创建了一个触发器来测试这一列是否为空,并抛出异常。但是这仅适用于INSERT查询,因为在UPDATE查询中,如果未设置此列,则使用当前值。换句话说,如果查询中未设置NEW.id_user_update,则它与OLD.id_user_update相等。
我找到的唯一解决方案是删除用户更新权限并强制其使用函数。但在这种情况下,这不是一个选项。
有什么想法吗?

欢迎来到Stackoverflow!请添加您的表创建语句,以便我们了解是否有任何阻止更新的列约束。 - undefined
1
更新没有被阻止。问题是:当我更新并且不设置id_user_update的值时,它会保持当前值。我想要的是每次都强制设置这个值,即使它与当前值相同。 - undefined
1个回答

0
你只需要简单地定义触发器ON INSERT OR UPDATE
CREATE FUNCTION mytrig() RETURNS trigger
   LANGUAGE plpgsql AS
'BEGIN
   NEW.id_user_update = get_current_user();
   RETURN NEW;
END;';

CREATE TRIGGER mytrig BEFORE INSERT OR UPDATE ON atable
   FOR EACH ROW EXECUTE PROCEDURE mytrig();

只剩下一个函数或其他方法来获取当前用户的用户ID。

实际上,这个id_user并不是一个数据库用户。它是指向另一张表的外键。 - undefined
那不会有任何影响。get_current_user是你需要提供的内容。你能描述一下你希望在id_user_update中得到什么值吗? - undefined
2
它可以是任何其他列,我想要的是,如果在更新查询中未设置特定列,则将其视为空值,而不是使用当前值。或者,以某种方式验证查询中是否设置了该列。 - undefined
我不明白。也许你应该编辑问题,并展示一个更完整的例子,说明你想要什么。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接