SQLクエリを含むファイルの構文を、CVSプロジェクトでコミットする前に確認したい。
それを行うために、私はcommitinfoスクリプトを持っていますが、sqlコマンドが有効かどうかを見つけるのに苦労しています。 psql
にはドライランモードがないようで、(ソースにある)文法から独自のpostgresql-dialactテスターを構築するのは長いストレッチのようです。
スクリプトには複数のクエリが含まれる場合があるため、EXPLAIN
でそれらを囲むことはできません。
ヒントはありますか?
最近、PostgreSQLのSQLの構文を静的にチェックするユーティリティを作成しました。 postgresの埋め込みSQL Cプリプロセッサであるecpgを利用してSQL構文をチェックするため、Postgres自体に組み込まれているものとまったく同じパーサーを使用します。
Githubで確認できます: http://github.com/markdrago/pgsanity 。 README=を使って、どのように動作するかをよりよく理解し、インストール方法の指示を得ることができます。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"
1つの方法は、最後にロールバックするトランザクションに入れることです。
BEGIN;
<query>;
<query>;
<query>;
ROLLBACK;
dblink 呼び出し、またはファイルシステムに書き込まれたもの、またはインクリメントされたシーケンスなど、ロールバックできない効果があることに注意してください。
テスト目的でデータベースのクローンを作成することをお勧めします。
EXPLAIN(ANALYZEなし)は、クエリを解析し、実際に実行せずに実行プランを準備します。
https://www.postgresql.org/docs/current/static/sql-explain.html
私は通常 Mimer online SQL validator を使用していますが、唯一のことは標準SQLのSQL構文をチェックすることです:
postgreSQLに特化したものではありません...ただし、標準に従ってコードを記述すれば、それを使用でき、うまく機能します...
SQL構文を検証する素晴らしいユーティリティ: SQL Fiddle
MySQL、Oracle、PostgreSQL、SQLite、MS SQLをサポートします。
SELECT 1 ( <your query> ) AS a WHERE 1 = 0;
でラップすることができます
検証に失敗しますが、実際には実行されません。クエリプランの例を次に示します。
Result (cost=0.00..0.01 rows=1 width=0)
One-Time Filter: false
Postgresql関数でクエリを実行し、最後に例外を発生させることができます。すべての変更がロールバックされます。例えば:
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;
別のソリューション-plpgsql_check
拡張( github )、pgpsql_lintの次の化身