首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:无法在只读事务中执行创建表。

错误:无法在只读事务中执行创建表。
EN

Stack Overflow用户
提问于 2015-07-02 13:48:06
回答 13查看 171.6K关注 0票数 38

我正在尝试在本地机器中设置动作练习数据。当我运行:psql -U <username> -f clubdata.sql -d postgres -x时,我得到了错误:psql:clubdata.sql:6: ERROR: cannot execute CREATE SCHEMA in a read-only transaction

为什么它在我的本地机器上创建一个只读数据库?我能换一下这个吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2015-07-04 04:45:58

向pgexercises.com伸出援手,他们就能帮助我了。

我分别运行了以下命令:

代码语言:javascript
运行
复制
psql -U <username> -d postgres
begin;
set transaction read write;
alter database exercises set default_transaction_read_only = off;
commit;
\q

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

票数 27
EN

Stack Overflow用户

发布于 2015-07-02 16:32:11

造成这种错误的最合理的原因通常是:

  • 尝试在只读副本上创建语句(整个实例为只读)。
  • <username>default_transaction_read_only设置为ON
  • 数据库将default_transaction_read_only设置为ON

前面提到的脚本在其第一行中包括:

代码语言:javascript
运行
复制
CREATE DATABASE exercises;
\c exercises
CREATE SCHEMA cd;

CREATE SCHEMA在第6行(而不是在前面)报告了的错误。

这意味着,当由CREATE DATABASE运行时,<username>确实可以工作。如果上面提到的任何理由都是直接适用的,那就行不通了。

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

这就是CREATE DATABASE工作的原因,但是一旦它用\c连接到不同的数据库,会话的default_transaction_read_only设置就会切换到ON

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

票数 41
EN

Stack Overflow用户

发布于 2019-01-15 04:52:11

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

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

发现,我的存储库快用完了!

当数据库无法再写入任何内容时,将禁用写入访问。我用的是Azure的Postgres。我不知道如果我在一个专用服务器上,是否会发生同样的效果。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31186414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档