【发布时间】:2014-07-09 08:54:39
【问题描述】:
当我在 psql 提示符中发出“删除”语句,然后在运行时取消它(通过按 Ctrl-C),由“错误:由于用户请求而取消语句”确认,我可以确定没有行被删除还是我应该假设某些行可能已被删除?
非常感谢您的回答!
问候, 杰克
【问题讨论】:
标签: postgresql psql
当我在 psql 提示符中发出“删除”语句,然后在运行时取消它(通过按 Ctrl-C),由“错误:由于用户请求而取消语句”确认,我可以确定没有行被删除还是我应该假设某些行可能已被删除?
非常感谢您的回答!
问候, 杰克
【问题讨论】:
标签: postgresql psql
DELETE [... WHERE ...] 语句作为单个事务执行,因此只有两种可能的结果:
数据库未更改(未删除任何行)。
所有行都被删除了。
如果交易因取消而中止,则结果 #1 - 没有变化。
只有当您的取消太迟而无法中止交易时,才会出现#2。
【讨论】:
auto-commit 可以关闭(\set AUTOCOMMIT off,可以添加到 .psqlrc 作为默认值),并且需要明确的 commit永久删除。