pgsql回滚函数或撤销的最后一步

时间:2012-07-05 05:19:47

标签: postgresql

我构建了一个pgsql db,并使用JDBC上传数据到db。但有时我上传错误的数据。 所以在pgsql中它有一些函数或sql语句可以允许回滚到最后一步,而不使用备份文件?

谢谢,

1 个答案:

答案 0 :(得分:1)

如果您在事务中运行事务,您可以使用“commit”或“rollback”结束事务,因此在您的脚本中,您最终可能会向用户提出一个交互式问题:“这看起来好吗?”然后进行提交或回滚。

请注意持久的“事务中空闲”可能对性能有害,因此您应该在超时后进行回滚(或提交)。当然,在进行任何数据库操作之前向用户提出问题会更好。

如果某些内容已经提交到数据库,据我所知,除非你有备份,否则无法回滚(dunno - 理论上可能基于WALs可能会这样做......但可能没有)。几年前,我正在实施一个带有“热备用备份服务器”的系统,它总是比生产数据库晚半个小时 - 然后我可以发出一个“遇险信号”,备份服务器将与旧的状态数据库,即如果我做了一些错误,比如update users set password=md5('foo' || salt)而不是update users set password=md5('foo' || salt) where username='tobixen'。如果主数据库发生故障,“热备用”将前滚然后联机。如果有任何相关内容,我可以发布有关此内容的其他详细信息。

如果您遇到麻烦,通常也可以设计数据库和脚本,以便进行手动回滚是非常简单的。