PostgreSQL中如何获取UPDATE操作前后的数据值?
解决UPDATE语句返回更新前后值的问题
在PostgreSQL中,你当前的语句返回两个"new"是因为RETURNING里的change.testvalue已经是更新后的值(已被替换成newvalue.testvalue),所以和newvalue.testvalue重复。要获取更新前后的数值,只需在RETURNING子句中用OLD关键字引用更新前的行数据:
CREATE temp table change ( id integer, testvalue varchar ); insert into change values (1, 'old' ); CREATE temp table newvalue ( id integer, testvalue varchar ); insert into newvalue values (1, 'new' ); UPDATE change SET testvalue = newvalue.testvalue FROM newvalue WHERE change.id = newvalue.id RETURNING OLD.testvalue AS old_value, newvalue.testvalue AS new_value;
说明:
OLD.testvalue:代表change表中该行更新前的testvalue值,也就是你需要的"old"newvalue.testvalue:是用来更新的新值,也可以用NEW.testvalue(和更新后的change.testvalue等价)
执行这条语句后,返回结果会是old, new,符合你的需求。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

