Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

927
Views
ERROR: no se puede ejecutar nextval() en una transacción de solo lectura - PostgreSQL

Puedo ver un error interno del servidor en mi aplicación desarrollada en spring mvc, usando wildfly como servidor web y la base de datos es PostgreSQL . ¿Qué significa esta excepción?

 ERROR: cannot execute nextval() in a read-only transaction

Antes funcionaba todo bien. Traté de buscar la solución aquí en stackoverflow pero no encontré nada que pudiera solucionar este problema.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La función nextval() se utiliza para incrementar una secuencia, lo que modifica el estado de la base de datos.

Obtiene ese error porque está en una transacción de solo lectura. Esto puede suceder porque

  1. Inició explícitamente una transacción de solo lectura con START TRANSACTION READ ONLY o similar.

  2. El parámetro de configuración default_transaction_read_only está on .

  3. Está conectado a un servidor en espera de replicación de transmisión.

Si default_transaction_read_only está on , puede iniciar una transacción de lectura y escritura con

 START TRANSACTION READ WRITE;

o cambie la configuración editando postgresql.conf o con el comando de superusuario

 ALTER SYSTEM SET default_transaction_read_only = off;
about 4 years ago · Santiago Trujillo Report

0

Como otros han señalado, nextval() en realidad actualiza la base de datos para obtener una nueva secuencia, por lo que no se puede usar en una transacción que está marcada como de solo lectura.

Como está usando Spring , sospecho que esto significa que está usando el soporte de transacciones de Spring. Si está utilizando el soporte de transacciones basado en anotaciones, obtendrá una transacción de solo lectura si tiene

 @Transactional(readOnly=true)

Eso significa que cuando Spring comience la transacción, la pondrá en modo de solo lectura.

Elimine el readOnly=true y, en su lugar, se crea una transacción de escritura regular.

Control de transacciones Spring en http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html

about 4 years ago · Santiago Trujillo Report

0

Quiero decir exactamente lo que dice, aquí hay un ejemplo:

 t=# create sequence so49; CREATE SEQUENCE t=# begin; BEGIN t=# select nextval('so49'); nextval --------- 1 (1 row) t=# set transaction_read_only TO on; SET t=# select nextval('so49'); ERROR: cannot execute nextval() in a read-only transaction t=# end; ROLLBACK

Supongo que se conectó como el llamado usuario ro, que es un usuario con "transaction_read_only" establecido en verdadero, EG:

 t=# select rolconfig from pg_roles where rolname ='ro'; rolconfig ---------------------------- {transaction_read_only=on} (1 row)

puede desactivar eso para su usuario, por supuesto, pero creo que esto está fuera del alcance

https://www.postgresql.org/docs/current/static/sql-set-transaction.html

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!