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

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

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