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

42P07

PostgreSQL 42P07 en base de datos: la tabla ya existe

Verificada con fuentes2 fuentesRevisada 4 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

PostgreSQL ha rechazado un CREATE porque ya existe una relación con ese nombre en el mismo esquema. Comprueba qué objeto existe y en qué esquema antes de borrar nada o de usar IF NOT EXISTS.

Seguridad primero

Antes de continuar

  • No ejecutes DROP TABLE para que el CREATE funcione sin revisar antes qué contiene el objeto: detente y consulta al responsable del dato.

Puedes hacerlo con seguridad

  • Mensaje completo y sentencia
  • Esquema en el que se crea
  • Objeto existente en el catálogo

Deja estas tareas a un profesional cualificado

  • No intentes esta tarea profesional: Corrección de la migración
  • No intentes esta tarea profesional: Decisión del DBA sobre el objeto existente

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. Corrección de la migración

    Qué haceEl desarrollador hace la migración repetible o usa CREATE TABLE IF NOT EXISTS, sabiendo que entonces PostgreSQL solo emite un aviso.

    Te tiene que enseñarla comprobación de la estructura existente.

    Por escritoel cambio en la migración y la prueba en un entorno de pruebas.

  2. Decisión del DBA sobre el objeto existente

    Qué haceEl DBA decide si el objeto existente se conserva, se renombra o se elimina, con copia previa y acuerdo del responsable del dato.

    Te tiene que enseñarel contenido y uso del objeto.

    Por escritola decisión aprobada y la copia hecha.

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. Mensaje completo y sentencia

    Sin herramientas especiales

    Quién:
    tú, como desarrollador u operador.
    Cómo:
    recoge del log el SQLSTATE, el mensaje y la sentencia CREATE exacta que falló.
    Resultado que importa:
    el nombre de la relación que ya existe.
    Si el SQLSTATE es 42P07:
    confirma el choque de nombres.
    Si es otro código:
    descarta esta ficha.
    Evidencia a conservar:
    línea del log con SQLSTATE, mensaje y hora.

    Evidencia: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL error and notice fields

  2. Esquema en el que se crea

    Sin herramientas especiales

    Quién:
    tú, con acceso de solo lectura.
    Cómo:
    ejecuta SHOW search_path y revisa si el CREATE indica esquema.
    Resultado que importa:
    en qué esquema intenta crear la tabla.
    Si el esquema no es el previsto:
    indica un search_path distinto; califica el nombre con el esquema.
    Si es el previsto:
    busca qué objeto existe ya ahí.
    Evidencia a conservar:
    valor de search_path y sentencia.

    Evidencia: PostgreSQL 18 schemas

  3. Objeto existente en el catálogo

    Sin herramientas especiales

    Quién:
    tú, con acceso de solo lectura.
    Cómo:
    consulta information_schema.tables por table_schema y table_name, o revisa índices, secuencias y vistas con ese nombre.
    Resultado que importa:
    qué tipo de relación existe y si su estructura coincide con la esperada.
    Si es la misma tabla:
    confirma una ejecución repetida; la migración debe ser idempotente.
    Si es otro objeto o estructura distinta:
    renombra la nueva tabla; no la sustituyas.
    Evidencia a conservar:
    resultado de la consulta.

    Evidencia: PostgreSQL 18 information_schema tables view · PostgreSQL 18 CREATE TABLE

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 42P07 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

  • duplicate_table
  • PostgreSQL 42P07
  • SQLSTATE 42P07

Qué significa

42P07 es duplicate_table, de la clase 42 (error de sintaxis o violación de reglas de acceso). La documentación de CREATE TABLE exige que el nombre de la tabla sea distinto del de cualquier otra relación del mismo esquema: tabla, secuencia, índice, vista, vista materializada o tabla externa. Sin esquema explícito, la tabla se crea en el esquema actual, el primero del search_path. El código no dice qué objeto choca: lo dicen el mensaje y la consulta al catálogo.

Advertencias y condiciones de parada

  • Precauciónadvertencia editorial

    No ejecutes DROP TABLE para que el CREATE funcione sin revisar antes qué contiene el objeto: detente y consulta al responsable del dato.

    Evidencia: PostgreSQL 18 CREATE TABLE

Síntomas y causas

Causas probables · en orden

  • Tabla creada en una ejecución anteriorFrecuente

    Típico de scripts o migraciones que se relanzan: el objeto ya existe con el mismo nombre en el mismo esquema.

    Evidencia: PostgreSQL 18 CREATE TABLE

  • Otra relación con el mismo nombrePosible

    El nombre coincide con un índice, secuencia o vista, no con una tabla. Se distingue al consultar el tipo del objeto existente.

    Evidencia: PostgreSQL 18 information_schema tables view · PostgreSQL 18 CREATE TABLE

  • Esquema distinto del esperadoPosible

    Sin esquema en el CREATE, se usa el primero del search_path; el choque puede estar en un esquema que no pensabas usar.

    Evidencia: PostgreSQL 18 schemas

Fuentes y referencias técnicas

  1. 1

    PostgreSQL 18 Appendix A: Error Codes

    PostgreSQL Global Development Group · 2026 · official_doc

  2. 2

    PostgreSQL error and notice fields

    PostgreSQL Global Development Group · 2026 · official_doc

Fuentes: PostgreSQL 18 Appendix A: Error Codes · PostgreSQL error and notice fieldsrevisado 2026-10-04 · verificado

¿Te ha resultado útil esta ficha?