PostgreSQL 8.2: 要求UPDATE语句中存在特定的列[英] PostgreSQL 8.2: Require specific column to be present in UPDATE statement

本文是小编为大家收集整理的关于PostgreSQL 8.2: 要求UPDATE语句中存在特定的列的处理方法,想解了PostgreSQL 8.2: 要求UPDATE语句中存在特定的列的问题怎么解决?PostgreSQL 8.2: 要求UPDATE语句中存在特定的列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想强制用户指定某个表(sometbl)的更新来源,例如.指定 'local' 或 'remote' (for col2) - 但当执行 UPDATE 语句时,应在 DB 级别检查该要求:

UPDATE sometbl SET col1 = 'abc';

应该抛出错误(异常),但是:

UPDATE sometbl SET col1 = 'abc', col2 = 'remote';

...会成功的.

我尝试为该表创建 BEFORE 更新触发器,但无法检查是否NEW.col2 已明确设置.

我使用了条件

IF NEW.col2 IS NULL THEN 
   RAISE EXCEPTION 'you must specify source of this update (local/remote)'
END IF;

但是每次更新中没有指定col2时(UPDATE sometbl SET col1 = 'abc')

我在 NEW.col2 伪变量中得到了该字段的当前值,而不是假定的 NULL.

当指定字段在 UPDATE stmt 中不存在时,是否有任何解决方法来阻止 UPDATING 行?

推荐答案

几个触发器?一个运行之前更新,并将列设置为空.如果该列仍然为空,则在 更新和呕吐(返回 NULL)之后运行.(如果触发器返回 NULL,则更新失败.)

本文地址:https://www.itbaoku.cn/post/1764161.html