Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

928
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda