是否可以在psql中的查询或事务中列出所有受影响的行?

时间:2014-08-14 18:45:13

标签: sql postgresql

场景:我做一些手动SQL命令来摆弄数据库。类似于update users set name='Married Name' where id = 123;将用户名更新为已婚姓名。

我知道:这应该是用户可以自己做的事情,或者应该有一个管理界面。它即将推出,但目前我需要手动完成。或者也许还有其他一些维护工作要做。

理想情况下,只是为了进行健全性检查(我是否忘记了where子句?)我想说,“当前事务会影响多少行”,因为我总是将我的写操作包装在事务中,如果不是提供o-crap救助点的其他原因。如果我得到“一排”,那很好,如果我得到“250行”,那就是一个问题,我需要回顾一下。

这不是小心工作的替代品,但我认为我必须犯一次或三次愚蠢的错误,所以这有助于防止这种情况发生。

2 个答案:

答案 0 :(得分:3)

您要查找的条款是returning

http://www.postgresql.org/docs/9.3/static/sql-update.html

我没有对此进行过测试,但请尝试:

update users set name='Married Name' where id = 123 returning *;

答案 1 :(得分:0)

事实证明,我不小心在我的psqlrc中保留了QUIET(我设置了QUIET 1,但是然后是\ unset quiet,这显然是区分大小写的。)

这样我就可以从每个命令中得到很好的受影响的行数(上面的命令会说" UPDATE 1"或者#34;更新200"如果我搞砸了)。

也就是说,在@Andreas建议的情况下,将returning *附加到我的命令末尾似乎是真正的好主意。我摆弄它,当我做危险的事情时,收到关于&#34的反馈是很好的;这些是你要删除的东西,你确定你不想要回滚?"。