2013-11-02 98 views
-1

我是rails新手,刚刚在强大的rails控制台遇到了我的第一次不好的经历。我在ALL中重写了一列,而不是只有一条记录,并且经过数小时的搜索后,我没有找到回滚这个愚蠢事务的常用方法(最终手动修复了76行!)。我如何在rails中回滚数据库事务

我当时正在研究heroku上的现场环境,只是想修复一个条目。 如果你做了愚蠢的事情,而不是使用pgbackup,那么必须有一种方法来回滚数据库中的事务(postgres)。

如果你能与我分享一些最佳实践或给我一个很好的阅读开始,那将是伟大的。 谢谢!

+4

“我正在研究现场环境” - 好主意! –

+0

您覆盖了列名或该列名的每个条目? – Newben

+0

每个条目都被覆盖,而不是列名。 – DonMB

回答

0

我假设你已经提交的事务,但以防万一你没有,你可以简单地做:

ROLLBACK TRANSACTION; 

因为我假设你已经试过了,不幸的答案是你唯一的选择是从最后已知的良好状态恢复数据库。

有一些选项和插件可能有助于避免将来出现此问题,但它们都伴随着性能成本。有关信息,请参阅其他堆栈溢出问题Database Content VersioningPostgres reverting back

+0

你是什么意思“提交交易”? 如果在数据库上运行查询,它立即提交,不是吗? 例如>> User.update_attributes(:姓氏,“约翰”) – DonMB

+0

通常,是的。我想我误解了你提到的“数据库控制台”而不是“控制台控制台”的问题。通常,在数据库控制台中,“开始事务”,执行操作,然后在确认结果后执行“提交”或“回滚”会更安全。您也可以在Rails控制台中执行显式的[transactions](http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html),但这通常是在代码中完成的,该代码检查错误而不是交互式使用。无论如何,赔率是你运气不好。 –

+0

感谢您的帮助Stewart。将尝试! – DonMB