Saltar al contenido

ERROR: no se puede ejecutar CREATE TABLE en una transacción de solo lectura

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> tiene default_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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *