我是rails新手,刚刚在强大的rails控制台遇到了我的第一次不好的经历。我在ALL中重写了一列,而不是只有一条记录,并且经过数小时的搜索后,我没有找到回滚这个愚蠢事务的常用方法(最终手动修复了76行!)。我如何在rails中回滚数据库事务
我当时正在研究heroku上的现场环境,只是想修复一个条目。 如果你做了愚蠢的事情,而不是使用pgbackup,那么必须有一种方法来回滚数据库中的事务(postgres)。
如果你能与我分享一些最佳实践或给我一个很好的阅读开始,那将是伟大的。 谢谢!
我是rails新手,刚刚在强大的rails控制台遇到了我的第一次不好的经历。我在ALL中重写了一列,而不是只有一条记录,并且经过数小时的搜索后,我没有找到回滚这个愚蠢事务的常用方法(最终手动修复了76行!)。我如何在rails中回滚数据库事务
我当时正在研究heroku上的现场环境,只是想修复一个条目。 如果你做了愚蠢的事情,而不是使用pgbackup,那么必须有一种方法来回滚数据库中的事务(postgres)。
如果你能与我分享一些最佳实践或给我一个很好的阅读开始,那将是伟大的。 谢谢!
我假设你已经提交的事务,但以防万一你没有,你可以简单地做:
ROLLBACK TRANSACTION;
因为我假设你已经试过了,不幸的答案是你唯一的选择是从最后已知的良好状态恢复数据库。
有一些选项和插件可能有助于避免将来出现此问题,但它们都伴随着性能成本。有关信息,请参阅其他堆栈溢出问题Database Content Versioning和Postgres reverting back。
你是什么意思“提交交易”? 如果在数据库上运行查询,它立即提交,不是吗? 例如>> User.update_attributes(:姓氏,“约翰”) – DonMB
通常,是的。我想我误解了你提到的“数据库控制台”而不是“控制台控制台”的问题。通常,在数据库控制台中,“开始事务”,执行操作,然后在确认结果后执行“提交”或“回滚”会更安全。您也可以在Rails控制台中执行显式的[transactions](http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html),但这通常是在代码中完成的,该代码检查错误而不是交互式使用。无论如何,赔率是你运气不好。 –
感谢您的帮助Stewart。将尝试! – DonMB
“我正在研究现场环境” - 好主意! –
您覆盖了列名或该列名的每个条目? – Newben
每个条目都被覆盖,而不是列名。 – DonMB