在Heroku中出现了ActiveRecord::StatementInvalid: PG::Error: ERROR: cannot execute UPDATE in a read-only transaction错误。

8

我使用追随者在Heroku上创建了一个新的数据库。当它与主数据库同步时,我取消了追随并将其提升为默认数据库。

看起来一切都正常,但似乎是只读的。现在,当我尝试从控制台保存记录时,出现以下错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR:  cannot execute UPDATE in a read-only transaction

有什么办法可以解决这个问题吗?

我会说你的副本实际上没有被提升。SELECT pg_is_in_recovery(); 报告了什么? - Craig Ringer
跟随者始终是只读的。 - Galen
1
在我进行取消关注之前就进行推广时,出现了这个错误。我删除了有问题的数据库(只读的那个),创建了一个新的关注者,在这个新的关注者上执行了pg:unfollow和pg:promote。然后一切正常了。 - Henrik N
https://stackoverflow.com/questions/46422248/activerecordstatementinvalid-pgreadonlysqltransaction-heroku-database-st/46435348#46435348 - Uri Klar
遇到了相同的问题,我们不能使用 set transaction read write; 来解决这个问题吗?我也无法创建一个 follower,因为我一直收到这个错误信息:An error was encountered when contacting the add-on partner to create heroku-postgresql:standard-2: The database you are attempting to follow is still too new. Please try again later. - Surya
显示剩余3条评论
2个回答

5

这个副本实际上从未被提升。请查看评论。

你可以通过以下方式确定一个副本是否正在跟随主服务器:

SELECT pg_is_in_recovery();

将返回true。在主服务器上,这不能返回true,因为主服务器处于恢复模式的唯一时间是在它启动时 - 然后您无法连接到它,因此无法运行该命令。这在9.2和9.3beta版本中是正确的;这可能会在未来版本中发生更改,因此如果您正在阅读此内容并使用新版本,请检查是否有专用函数以检查服务器是否为副本。


0
在某些情况下,您需要在活动记录控制台上显式设置写入模式。尝试运行:
readwrite!
这可能与Heroku控制台没有直接关系,但我认为我会在这里发布,以供需要此特定解决方案的任何人使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接