- Software y sistemas
- Base de datos
42P07
PostgreSQL 42P07 en base de datos: la tabla ya existe
Evidencia vinculada a esta decisión
Ver fuente: PostgreSQL 18 Appendix A: Error CodesNivel 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.
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.
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.
Mensaje completo y sentencia
- 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
Esquema en el que se crea
- 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
Objeto existente en el catálogo
- 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
PostgreSQL 18 Appendix A: Error Codes
PostgreSQL Global Development Group · 2026 · official_doc
- 2
PostgreSQL error and notice fields
PostgreSQL Global Development Group · 2026 · official_doc
¿Te ha resultado útil esta ficha?