我正在尝试在本地机器中设置动作练习数据。当我运行:psql -U <username> -f clubdata.sql -d postgres -x时,我得到了错误:psql:clubdata.sql:6: ERROR: cannot execute CREATE SCHEMA in a read-only transaction。
为什么它在我的本地机器上创建一个只读数据库?我能换一下这个吗?
发布于 2015-07-04 04:45:58
向pgexercises.com伸出援手,他们就能帮助我了。
我分别运行了以下命令:
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脚本。
发布于 2015-07-02 16:32:11
造成这种错误的最合理的原因通常是:
<username>将default_transaction_read_only设置为ONdefault_transaction_read_only设置为ON前面提到的脚本在其第一行中包括:
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。
但当然,这将是一个非常奇怪和不寻常的配置。
发布于 2019-01-15 04:52:11
我得到了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。我不知道如果我在一个专用服务器上,是否会发生同样的效果。
https://stackoverflow.com/questions/31186414
复制相似问题