我想将数据库从一个应用程序复制到 Heroku 中的另一个应用程序。我有一个索引问题,迫使我使用关注者数据库来执行此操作,然后取消关注。
我的问题是,现在在创建关注者、取消关注并推广它之后,我在尝试写入时遇到错误:
ActiveRecord::StatementInvalid: PG::ReadOnlySqlTransaction: 错误: 无法在只读事务中执行 ALTER TABLE
此外,当我运行: SELECT pg_is_in_recovery();
我得到了 true
我所做的是:
heroku 插件:创建 heroku-postgresql:standard-4 –follow MAIN_DB_ADDON_NAME -a app-that-follows
heroku pg:unfollow HEROKU_POSTGRESQL_COLOR_URL -a app-that-follows
heroku pg:promote HEROKU_POSTGRESQL_COLOR_URL -a app-that-follows
知道为什么我会收到此错误,更重要的是,如何解决它?
谢谢,
乌里
最佳答案
过了一会儿,数据库再次变得可写。我附上从 heroku 支持处得到的答案:
When you unfollowed the primary database, was the follower completely up to date? If the follower has a bunch of built up WAL it can sometimes leave the database in recovery until it is able to ro replay all of the WAL.
事实上,当您执行 pg:info
并拥有关注者数据库时,您可以看到一个 Behind By
字段,显示您的关注者落后了多少次提交。
我的远远落后了,所以花了一段时间才 catch ......
将其添加到 heroku postgres 文档中可能是个好主意
关于ruby-on-rails - ActiveRecord::StatementInvalid: PG::ReadOnlySqlTransaction: - 即使取消关注后,Heroku 数据库仍然只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46422248/