我想强制用户指定某个表(sometbl)的更新源,例如 。指定“本地”或“远程”(对于COL2) - 但这一要求应该发生在数据库级别检查时,执行UPDATE
语句,以便:PostgreSQL 8.2:要求在UPDATE语句中存在特定的列
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 SET sometbl COL1 = 'ABC')
我在NEW.col2得到了字段的当前值伪var,而不是假设NULL。
是否有任何解决方法来防止UPDATING指定的字段在UPDATE stmt中不存在?
该解决方案将不会在我的情况下工作,因为在第一个表中的行(或多个)具有有效的外键将在更新之前存在,所以即使没有指定外键字段值更新会成功。 – 2009-10-09 13:02:57