今天在生产环境连接postgresql时,发现可以正常查询,但是无法进行数据库增删改和建表语句的执行,但是当前使用的帐号确实拥有读写数据库的权限。

报错信息如下:[25006]错误:不能在一个只读模式的事务中执行delete

问题排查

在网上看了很多例子,有的是说可能是数据库设置了只读,有的是说当前连接数据库的驱动设置了只读模式。但是都看过了都不是。

查询数据库是否只读模式

show default_transaction_read_only ;  

问题解决

原因是数据库是集群的模式,一主二从,应用只能连接主库进行读写,而当前连接了从库,导致报错“不能在一个只读模式的事务中执行x x x”