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.