Referencia técnica independienteSitio oficial
  • Software y sistemas
  • Base de datos

25P02

PostgreSQL 25P02 en base de datos: transacción abortada por un error anterior

Verificada con fuentes3 fuentesRevisada 3 oct 2026
¿Viene un técnico? Mira los 2 pasos que debe enseñarte
Trace

Evidencia vinculada a esta decisión

Ver fuente: PostgreSQL 18 Appendix A: Error Codes

Nivel de riesgo

Precaución

Actúa con cuidado; puede requerir técnico si persiste.

Urgencia

Media — atiéndelo hoy

Respuesta rápida

Una sentencia anterior de la misma transacción falló y PostgreSQL ignora todo lo que envíes después. Revisa el primer error previo, que es la causa real, y haz ROLLBACK o vuelve a un savepoint antes de seguir.

Seguridad primero

Antes de continuar

  • No reintentes la sentencia que devuelve 25P02 ni sigas enviando órdenes: todas fallarán hasta que hagas ROLLBACK.

Puedes hacerlo con seguridad

  • Primer error de la transacción
  • Estado de la transacción antes de reutilizar la conexión
  • Sesiones en estado abortado en el servidor

Deja estas tareas a un profesional cualificado

  • No intentes esta tarea profesional: Manejar errores con ROLLBACK o savepoints
  • No intentes esta tarea profesional: Limpiar conexiones al devolverlas al pool

Lo que un técnico debe poder justificar

Viene un técnico

Estos son los pasos que tiene que hacer y enseñarte. Márcalos mientras trabaja: si se salta pasos, no aceptes el cambio de pieza.

No son instrucciones para que abras o manipules el equipo. Son las comprobaciones que deben sostener una conclusión técnica.

  1. Manejar errores con ROLLBACK o savepoints

    Qué haceEl desarrollador asegura que cada error dentro de una transacción termina en ROLLBACK, o en ROLLBACK TO si se definió un savepoint antes de la sentencia que puede fallar.

    Te tiene que enseñarel bloque de manejo de errores.

    Por escritola prueba con un error provocado.

  2. Limpiar conexiones al devolverlas al pool

    Qué haceEl equipo revisa que el pool no entregue conexiones con una transacción fallida.

    Te tiene que enseñarla configuración o el código de devolución.

    Por escritoel resultado de la prueba.

Antes de aceptar una pieza o reparación

Aún no ha demostrado nada. No aceptes un cambio de pieza solo por el código.

Sigue estos pasos

Aviso: Sigue el orden documentado. Un código identifica el sistema afectado, pero por sí solo no demuestra qué pieza está averiada.

  1. Primer error de la transacción

    Sin herramientas especiales

    Quién:
    tú, como desarrollador.
    Cómo:
    en el registro de la aplicación o del servidor, busca el SQLSTATE anterior a 25P02 en la misma sesión.
    Resultado que importa:
    cuál fue la primera sentencia que falló y su código.
    Si encuentras otro código antes:
    ese es el problema que hay que resolver; 25P02 es solo la consecuencia.
    Si no aparece ningún error previo:
    apunta a una conexión heredada en mal estado; revisa el pool.
    Evidencia a conservar:
    ambas entradas con hora y sesión.

    Evidencia: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL 18 transactions tutorial

  2. Estado de la transacción antes de reutilizar la conexión

    Sin herramientas especiales

    Quién:
    tú, como desarrollador.
    Cómo:
    en libpq consulta PQtransactionStatus; en otros drivers, su equivalente.
    Resultado que importa:
    si devuelve PQTRANS_INERROR.
    Si devuelve PQTRANS_INERROR:
    confirma la transacción fallida; envía ROLLBACK antes de cualquier otra cosa.
    Si devuelve PQTRANS_IDLE:
    descarta este punto; el fallo está en la misma unidad de trabajo.
    Evidencia a conservar:
    estado devuelto y punto del código.

    Evidencia: PostgreSQL ROLLBACK · PostgreSQL 18 libpq connection status functions

  3. Sesiones en estado abortado en el servidor

    Requiere herramientas

    Quién:
    el DBA o administrador.
    Cómo:
    consulta pg_stat_activity y filtra por state igual a «idle in transaction (aborted)».
    Resultado que importa:
    qué aplicaciones y usuarios tienen sesiones en ese estado y desde cuándo.
    Si siempre es la misma aplicación:
    confirma que no hace ROLLBACK tras los errores.
    Si no hay ninguna:
    descarta conexiones heredadas en ese estado.
    Evidencia a conservar:
    resultado de la consulta con hora.

    Requiere permisos para ver las sesiones de otros usuarios. Si no los tienes, no lo hagas con otra cuenta: pídelo al DBA.

    Evidencia: PostgreSQL 18 cumulative statistics system

Situación no resuelta

Si el error persiste, no sigas probando por tu cuenta. Mira qué tiene que hacer y enseñarte el técnico.

Técnico virtual

¿Sigue apareciendo 25P02 tras comprobarlo?

Este recorrido usa el código exacto y tus respuestas para elegir una prueba, su resultado esperado y la siguiente bifurcación.

Dónde se aplica este código

Un código solo tiene significado dentro del producto y la versión correctos.

Ámbito principal

Sistema
Software y sistemas
Marca
PostgreSQL
Tipo de producto
Base de datos

Variantes conocidas del código

  • in_failed_sql_transaction
  • PostgreSQL 25P02
  • SQLSTATE 25P02

Qué significa

El apéndice A asigna 25P02 a in_failed_sql_transaction, en la clase 25 (estado de transacción no válido). Cuando una sentencia falla dentro de un bloque de transacción, el sistema pone la transacción en estado abortado. Desde ahí solo sirve ROLLBACK, que la deshace entera, o ROLLBACK TO a un savepoint definido antes del error. libpq lo muestra como PQTRANS_INERROR. El código no es la causa: solo avisa de que el error original no se trató.

Advertencias y condiciones de parada

  • Precauciónadvertencia editorial

    No reintentes la sentencia que devuelve 25P02 ni sigas enviando órdenes: todas fallarán hasta que hagas ROLLBACK.

    Evidencia: PostgreSQL ROLLBACK · PostgreSQL 18 transactions tutorial

Síntomas y causas

Causas probables · en orden

  • Error anterior no tratado en el códigoFrecuente

    La aplicación capturó o ignoró un error y siguió enviando sentencias en la misma transacción. El primer error de la traza es el que hay que corregir.

    Evidencia: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL 18 transactions tutorial

  • Conexión devuelta al pool con la transacción fallidaPosible

    Otra parte del código recibe una conexión que quedó en estado abortado y su primera sentencia ya falla. Se ve porque el fallo aparece en código que no tuvo ningún error.

    Evidencia: PostgreSQL 18 libpq connection status functions

Fuentes y referencias técnicas

  1. 1

    PostgreSQL 18 Appendix A: Error Codes

    PostgreSQL Global Development Group · 2026 · official_doc

  2. 2

    PostgreSQL transaction isolation

    PostgreSQL Global Development Group · 2026 · official_doc

  3. 3

    PostgreSQL ROLLBACK

    PostgreSQL Global Development Group · 2026 · official_doc

Fuentes: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL transaction isolation · PostgreSQL ROLLBACKrevisado 2026-10-03 · verificado

¿Te ha resultado útil esta ficha?