【问题标题】:how do I rollback a database transaction in rails如何在 Rails 中回滚数据库事务
【发布时间】:2013-11-02 00:19:34
【问题描述】:

我是 Rails 新手,刚刚在强大的 Rails 控制台上遇到了第一次糟糕的体验。我覆盖了 ALL 中的一列,而不仅仅是一条记录,经过数小时的谷歌搜索后,我没有找到一种通用方法来回滚这个愚蠢的事务(最终手动修复了 76 行!)。

我正在研究 heroku 的实时环境,只想修复一个条目。 如果您做了愚蠢的事情,必须有一种方法可以回滚数据库中的事务(postgres) - 而不是使用 pgbackup。

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

【问题讨论】:

  • “我在现场环境中工作” - 好主意!
  • 您覆盖了列名或该列名的每个条目?
  • 每个条目都被覆盖了,而不是列名。

标签: ruby-on-rails heroku rollback rails-console


【解决方案1】:

我假设你已经提交了交易,但万一你还没有,你可以简单地这样做:

ROLLBACK TRANSACTION;

既然我假设您已经尝试过了,那么不幸的答案是您唯一的选择是从上次已知的良好状态恢复数据库。

有一些选项和插件将来可能有助于避免这个问题,但它们都会带来性能成本。有关一些信息,请参阅这些其他 Stack Overflow 问题 Database Content VersioningPostgres reverting back

【讨论】:

  • “提交交易”是什么意思?如果在数据库上运行查询,它会立即提交,不是吗?例如。 >> User.update_attributes(:surname, "John")
  • 通常,是的。我想我误读了您的问题,因为提到了“db 控制台”而不是“rails 控制台”。通常,在数据库控制台中“开始事务”,执行您的操作,然后在您确认结果后“提交”或“回滚”会更安全。您也可以在 Rails 控制台中显式执行transactions,但这通常是在检查错误的代码中完成,而不是在交互式使用中。无论如何,你很可能不走运。
  • 感谢您的帮助斯图尔特。会试试的!
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
相关资源
最近更新 更多