usar para monitorear herramientas funciona español datos consultas con como comandos bases administración sql parsing postgresql syntax cvs

funciona - herramientas para monitorear postgresql



Verificación de sintaxis de PostgreSQL sin ejecutar la consulta (7)

EXPLAIN (sin ANALYZE) analizará la consulta y preparará un plan de ejecución sin ejecutarlo realmente.

https://www.postgresql.org/docs/current/static/sql-explain.html

Quiero verificar la sintaxis de los archivos que contienen consultas SQL antes de que puedan comprometerse en mi proyecto de CVS.

Para hacer eso, tengo una secuencia de comandos commitinfo, pero tengo problemas para descubrir si los comandos sql son válidos. psql no parece tener un modo dryrun, y la construcción de mi propio postgresql-dialact tester a partir de la gramática (que está en la fuente) parece un largo tramo.

Las secuencias de comandos pueden contener múltiples consultas, por lo que una EXPLAIN no puede envolverse alrededor de ellas.

¿Algún consejo?


Normalmente uso el validador de SQL en línea de Mimer , lo único es que comprueba la sintaxis de SQL para SQL estándar:

  • SQL-92
  • SQL-99
  • SQL-03

y no específico para PostgreSQL ... Sin embargo, si escribe código siguiendo el estándar, puede usarlo y funciona bien ...


Puede ejecutar consultas iside postgresql function y elevar excepciones al final. Todos los cambios se revertirán. Por ejemplo:

CREATE OR REPLACE FUNCTION run_test(_sp character varying) RETURNS character varying AS $BODY$ BEGIN EXECUTE ''SELECT '' || _sp; RAISE EXCEPTION ''#OK''; EXCEPTION WHEN others THEN RETURN SQLERRM; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;

Otra plpgsql_check extensión plpgsql_check ( en github ), la próxima encarnación de pgpsql_lint


Recientemente escribí una utilidad para comprobar estáticamente la sintaxis de SQL para PostgreSQL. Aprovecha ecpg, el preprocesador de SQL C incorporado para postgres, para verificar la sintaxis de SQL, por lo que utiliza el mismo analizador que está incorporado en Postgres.

Puedes verlo en github: http://github.com/markdrago/pgsanity . Puede darle un vistazo al archivo README para obtener una mejor idea de cómo funciona y para obtener instrucciones sobre cómo instalarlo. Aquí hay un breve ejemplo de cómo se puede usar pgsanity:

$ pgsanity good1.sql good2.sql bad.sql bad.sql: line 1: ERROR: syntax error at or near "bogus_token" $ find -name ''*.sql'' | xargs pgsanity ./sql/bad1.sql: line 59: ERROR: syntax error at or near ";" ./sql/bad2.sql: line 41: ERROR: syntax error at or near "insert" ./sql/bad3.sql: line 57: ERROR: syntax error at or near "update"


Simplemente puede envolverlo en SELECT 1 ( <your query> ) AS a WHERE 1 = 0;

Fallará en la validación, pero en realidad no se ejecutará. Aquí hay un plan de consulta de ejemplo:

Result (cost=0.00..0.01 rows=1 width=0) One-Time Filter: false


Una forma sería ponerlo en una transacción que revierte al final:

BEGIN; <query>; <query>; <query>; ROLLBACK;

Tenga en cuenta que hay algunos efectos que no pueden revertirse, como dblink llamadas a través de dblink , o cualquier cosa escrita en el sistema de archivos o secuencias incrementales.

Aconsejaría clonar su base de datos para fines de prueba.


Una maravillosa utilidad para verificar la sintaxis de SQL : SQL Fiddle

Admite MySQL, Oracle, PostgreSQL, SQLite, MS SQL.