Solución:
Normalmente, las razones más plausibles para este tipo de error son:
-
intentando crear declaraciones en una réplica de solo lectura (toda la instancia es de solo lectura).
-
<username>
tienedefault_transaction_read_only
establecido en ON -
la base de datos tiene
default_transaction_read_only
establecido en ON
El guión mencionado tiene en sus primeras líneas:
CREATE DATABASE exercises;
c exercises
CREATE SCHEMA cd;
e informas que el error ocurre con CREATE SCHEMA
en la línea 6, no antes.
Eso significa que el CREATE DATABASE
funciona, cuando lo maneja <username>
. Y no funcionaría si alguna de las razones anteriores fuera directamente aplicable.
Una posibilidad que técnicamente explicaría esto sería que default_transaction_read_only
sería ON
en el postgresql.conf
archivo y configúrelo en OFF
para la base de datos postgres
, al que se conecta la invocación de psql, a través de un ALTER DATABASE
declaración que reemplaza al archivo de configuración.
Por eso CREATE DATABASE
funciona, pero tan pronto como se conecta a una base de datos diferente con c
, los default_transaction_read_only
el escenario de la sesión cambiaría a ON
.
Pero, por supuesto, esa sería una configuración bastante extraña e inusual.
Se acercó a pgexercises.com y pudieron ayudarme.
Ejecuté estos comandos (por separado):
psql -U <username> -d postgres
begin;
set transaction read write;
alter database exercises set default_transaction_read_only = off;
commit;
q
Luego dejé caer la base de datos de la terminal. dropdb exercises
y ejecuté el script de nuevo psql -U <username> -f clubdata.sql -d postgres -x -q
Estaba teniendo cannot execute CREATE TABLE in a read-only transaction
, cannot execute DELETE TABLE in a read-only transaction
y otros.
Todos siguieron un cannot execute INSERT in a read-only transaction
. Era como si la conexión se hubiera cambiado a solo lectura en medio de mi procesamiento por lotes.
¡Resulta que me estaba quedando sin almacenamiento! El acceso de escritura se deshabilitó cuando la base de datos ya no podía escribir nada. Estoy usando Postgres en Azure. No sé si sucedería el mismo efecto si estuviera en un servidor dedicado.