我正在尝试在本地机器中设置动作练习数据。当我运行: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
复制相似问题