错误:无法在只读事务中执行CREATE TABLE

ltr*_*npr 13 postgresql

我正在尝试在本地计算机中设置pgexercises数据.当我跑:psql -U <username> -f clubdata.sql -d postgres -x我得到错误:psql:clubdata.sql:6: ERROR: cannot execute CREATE SCHEMA in a read-only transaction.

为什么它在我的本地机器上创建一个只读数据库?我可以改变吗?

Dan*_*ité 19

通常,这种错误的最可信的原因是:

  • 在只读副本上尝试创建语句(整个实例是只读的).

  • <username>已default_transaction_read_only设置为ON

  • 数据库已default_transaction_read_only设置为ON

提到的脚本有第一行:

CREATE DATABASE exercises;
\c exercises
CREATE SCHEMA cd;
Run Code Online (Sandbox Code Playgroud)

并且您报告错误发生CREATE SCHEMA在第6行,而不是之前.

这意味着它CREATE DATABASE在运行时确实有效<username>.如果上述任何原因直接适用,它将无效.

从技术上解释这一点的一种可能性default_transaction_read_only是ON在postgresql.conf文件中,并设置OFF为数据库postgres,即psql的调用连接到的数据库,通过ALTER DATABASE取代配置文件的语句.

这就是为什么CREATE DATABASE有效,但是一旦它连接到不同的数据库\c,default_transaction_read_only会话的设置就会转为ON.

但当然这将是一个非常奇怪和不寻常的配置.


Bra*_*ews 12

我有得到cannot execute CREATE TABLE in a read-only transaction,cannot execute DELETE TABLE in a read-only transaction和其他人。

他们都跟着一个cannot execute INSERT in a read-only transaction。就好像在我的批处理过程中连接已经切换到只读状态。

原来,我的存储空间用完了!当数据库无法再写入任何内容时,写入访问被禁用。我在 Azure 上使用 Postgres。我不知道如果我在专用服务器上是否会发生同样的效果。

  • 这也是我的问题,但解决方案不在这里,因此对于 DigitalOcean 上的任何人来说,例如,使用“SET default_transaction_read_only = OFF;” (6认同)

Bha*_*aja 11

我对Postgre更新声明有同样的问题

SQL Error: 0, SQLState: 25006 ERROR: cannot execute UPDATE in a read-only transaction
Run Code Online (Sandbox Code Playgroud)

通过运行以下查询来验证Database访问,它将返回true或false

SELECT pg_is_in_recovery()
Run Code Online (Sandbox Code Playgroud)

true-> 数据库只有读访问权限

false-> 数据库具有完全访问权限

如果返回 true,则与 DBA 团队检查是否具有完全访问权限,并尝试ping进入command prompt并确保连接。

ping <database hostname or dns>
Run Code Online (Sandbox Code Playgroud)

还要验证数据库是否有主节点和备用节点


ltr*_*npr 9

到了pgexercises.com,他们能够帮助我.

我运行这些命令(单独):

psql -U <username> -d postgres
begin;
set transaction read write;
alter database exercises set default_transaction_read_only = off;
commit;
\q
Run Code Online (Sandbox Code Playgroud)

然后我从终端删除了数据库dropdb exercises并再次运行脚本psql -U <username> -f clubdata.sql -d postgres -x -q


pab*_*ete 6

如果使用 Azure Database for PostgreSQL,当使用的存储接近总容量时,服务器将进入只读模式。

您得到的错误正是:

ERROR: cannot execute XXXXXXXXX in a read-only transaction

https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-compute-storage


小智 6

Dbeaver:就我而言 在此输入图像描述

这是开着的。