我是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