このプロジェクトについて

pgfathomはPostgreSQLスキーマ考古学の読み取り専用コマンドラインユーティリティです。外部キーとして宣言されていないリレーションシップを、カタログ、ビューや関数からの使用実績、命名規則、プランナ統計を検査することで発見します。データベースへの書き込みは行わず、本番環境での安全な運用を目的としています。 このツールが解決する問題は、多くのレガシーPostgreSQLデータベースに隠れた参照整合性があり、つまり外部キー制約を持たずに他テーブルを指す列や、NOT VALIDで作成されて未検証のままの制約が存在することです。これにより∆などのツールでモデルが見えず、孤立行が unnoticed に蓄積してしまいます。 pgfathomの機能: * discoverモードでは、終端子レポート(broken、confirmed、weak、unvalidated、detectedの判断)、バージョン付きJSONモデル、レビュー可能な.sqlファイルを出力します。確認済み関係には、重大なロックを避けるためにVALIDATE CONSTRAINTが分割されたDDLと、必要な場合にCREATE INDEX CONCURRENTLYが含まれます。壊れた関係はコメント付きDDLとして出力され、ユーザーが孤児行の処理を決定できます。 * 命名プロファイル(pt‐br、en、es)をサポートし、スキーマがまだ宣言しているキーから接辞規則を直接読み取ることができます。ユーザーはカスタムTOMLプロファイルを供給できます。 * 結合述語はビュー定義と関数本文(および可能であればpg_stat_statements)から抽出され、名前の一致では到達できない関係を見つけます。 * 検証パイプラインは6ステージから構成されます: カタログの読み取り、使用実績のマイニング、プロファイルを用いた候補生成、メタデータでのスコアリング、統計によるプリフィルター、集約を用いた最終的なデータ検証。 インストール方法にはDEB/RPMパッケージ、Homebrew、Dockerイメージ、またはGoによるソースビルドがあります。ツールは読み取り専用で、ステートメントとロックタイムアウトを尊重し、並行性を制限し、スキーマとテーブルのカバレッジを報告するため、沈黙を健全さと誤認しません。 スコープはデフォルトでpublicスキーマですが、--all-schemas、--schema、--exclude-schema、--excludeフラグで拡張可能です。setupコマンドは初回ユーザーを接続、スキーマ選択、検証深度、出力先までの案内ガイドします。 正確性は回収率で測定されます: 完全な外部キーを持つスキーマからそれらを剥ぎ取り、pgfathomを実行し、回収された割合を報告します。GitLab、自治体システム、Discourseをカバーする公開コルパス上でパフォーマンスを示し、部分的(半数のキーを除去)およびグリーンフィールド(キー非宣言)の両 régime で結果を公表しています。各ステージの貢献度(プロファイルのみ、命名検出、結合マイニング)も報告されます。 出力には、各判断ごとのカウント、分析済みテーブル、統計プリフィルター結果を含む端末サマリー、タイムスタンプ付きバージョン化JSONモデル、および確認済みキー用DDL(レビュー後に実行可能)とコメント付きDDL(任意の行動前に要検討)を含む.sqlファイルが含まれます。生成されるすべてのSQLは実行前にレビューされることを意図しています。 つまり、pgfathomは静かで文書化されていないスキーマを可視で実用的なモデルに変え、壊れた整合性の解消に必要な正確なクエリと、欠落した制約を復元するための安全なDDLを提供します。