pgsql 报错 in a read-only transaction

PG cannot execute 一些dml,ddl语句的时候报:in a read-only transaction sql

这种状况有多是如下缘由引发的:数据库

1 可能发生了主备切换:查看/data/pg_hba.confmarkdown

  select pg_is_in_recovery(); 备机返回Tsession

2 show default_transaction_read_only 查看是否参数值为ONide

DB级别:
alter database xxxxx set default_transaction_read_only = off;post

系统级别:postgresql

alter system set default_transaction_read_only=off;
select pg_reload_conf();进程

一些参数(实际上是看pg_settings 的context字段),是能够不用重启postgres cluster 就能够生效it

pg_ctl -D /var/lib/pgsql/data reload
select pg_reload_conf()io

internal:这类参数为只读参数。有的是postgres程序写死的,有些是在安装数据库时intdb时设置好的。

postmaster:这类参数须要重启数据库才能生效。

sighup:不须要重启数据库,但要向postmaster进程发送sighup信号,即须要pg_ctl reload命令。

backend:无需重启数据库,只需向postmaster进程发送sighup信号。但新的配置值只能在以后的新链接中生效,已有链接中这些参数值不会改变。

superuser:这类参数能够由超级用户使用set修改。参数设置后只会影响超级用户自身的session配置,不会影响其余用户。

user:普通用户使用set设置,这类参数修改后和superuser类参数同样,也是只影响自身session。仅当没有经过set 设置会话本地值时,postgresql.conf中的改变才会影响现有的会话

相关文章
相关标签/搜索