• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

460
Views
¿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?

about 3 years ago · Santiago Trujillo
1 answers
Answer question

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$) ...
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error