スポンサーリンク

PostgreSQLのREINDEXをbatchから実行する

batchPostgreSQL

PostgreSQLのユーザーデータベースで、使われているIndex(Select文などからScanされたことがあるIndex)のみ、REINDEXを実行するバッチ(bat)を作成しました。
ソースコードはGitHubで公開しています。

フォルダ/ファイル構成

select_index.sql

・「WHERE schemaname not like ‘pg_%’ and schemaname != ‘information_schema’」でPostgreSQLのシステムスキーマは対象外にしています。
・idx_scan、idx_tup_read、idx_tup_fetch いずれも0以下の場合、使われていないIndexだと見なし、REINDEX対象外にしています。

select_index_output.txt

・select_index.sql の実行結果。

reindex.bat

・(ホスト名)(データベース名)(データベース ログインユーザ名)(データベース ログインパスワード)を環境に合わせて変更することで実行可能です。
・select_index.sql をPostgreSQLに発行し、抽出されたIndexを対象に REINDEXを実行します。
・「for /f “delims=” %%a in (%SELECT_INDEX_OUTPUT_FILE%) do」でSQL実行結果ファイルを1行づつ読込み、「echo %%a | find “〇〇〇” 1>nul if not ERRORLEVEL 1」で、Index名以外はスキップしています。

20230106.log

・reindex.bat 実行ログ。

コメント

タイトルとURLをコピーしました