Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

503
Vistas
¿Cómo corregir el ERROR "la relación <nombre_de_la_tabla> no existe" incluso cuando se usa el bloque pgsql 'SI EXISTE-ENTONCES'?

Estamos utilizando la versión Postgres 13.0 con el archivo Spring-Boot .sql como paso inicial.

Necesito ejecutar un script de ACTUALIZACIÓN, pero solo si la tabla en sí ya existe.

Después de un poco de esfuerzo para entender cuál es la sintaxis correcta, llegué con el siguiente script:

 ALTER TABLE IF EXISTS ONLY scm_repos ADD COLUMN IF NOT EXISTS token_id BIGINT; DO ' BEGIN IF EXISTS (SELECT 1 FROM scm_repos WHERE id = 1) THEN UPDATE scm_repos repos SET token_id=(SELECT token_id FROM scm_orgs orgs WHERE repos.org_id=orgs.id); END IF ; END; ' ;

Mi intención es simple: ejecutar el script ACTUALIZAR solo si la tabla scm_repos existe, pero independientemente de lo que intenté, sigo recibiendo el siguiente error:

 Failed to execute SQL script statement #5 of URL [jar:file:/app/cx-integrations-datastore.jar!/BOOT-INF/classes!/schema.sql]: DO ' BEGIN IF EXISTS (SELECT 1 FROM scm_repos WHERE id = 1) THEN UPDATE scm_repos repos SET token_id=(SELECT token_id FROM scm_orgs orgs WHERE repos.org_id=orgs.id); END IF ; END; ' ; nested exception is org.********ql.util.PSQLException: ERROR: relation "scm_repos" does not exist Where: PL/pgSQL function inline_code_block line 3 at IF

¿Que me estoy perdiendo aqui?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

13.0 tiene errores no corregidos conocidos. 13.4 es la última versión de 13. Casi nunca hay una buena razón para ejecutar una versión de lanzamiento menor anterior. No es que eso parezca ser relevante aquí.

Pero lo que te estás perdiendo aquí es que en el nivel superior, EXISTS verifica si SELECCIONAR devuelve alguna fila. No verifica si las tablas mencionadas en la lista FROM de SELECT existen o no, asume que sí.

Puede cambiar su consulta para que consulte el catálogo para ver si existe la tabla, algo como:

 IF EXISTS (SELECT 1 FROM pg_class where relname=$J$scm_repos$J$) ...
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda