すべての PostgreSQL クエリをログに記録する
PostgreSQL は、その堅牢性、速度、信頼性、および高性能で市場で人気があります。 さらに、PostgreSQL では、いくつかの構成設定を変更するだけで、ロギングが比較的簡単になりました。
これらの設定はメモリ内で変更でき、その特定のクライアント セッションのみのロギングを一時的に有効にできます。 ただし、Postgres はすべてのクエリをログに記録して永続的に機能させることができます。
この記事では、すべての PostgreSQL クエリをログに記録し、構成ファイルを更新する方法について説明します。
PostgreSQL クエリの概要
PostgreSQL は、ユーザーが必要に応じて使用、変更、実装できる非常に安定したデータベース アプリケーションとして有名です。 その結果、世界中の多くの分析および Web アプリケーションの主要なデータベースとなっています。
SQL は、データベースにデータを格納して操作する構造化クエリ言語です。 SQL クエリは、あらゆる場所のリレーショナル データベース管理システムでさまざまなデータ操作を実行するのに役立ちます。
この強力な言語を通じて、複雑なクエリの実行からデータのフェッチ、データベース内のレコードの挿入、更新、削除まで、さまざまな操作を実行できます。
また、データベースに新しいオブジェクトを作成し、権限テーブル、ビュー、プロシージャ、関数などを設定することもできます。
Postgres のすべてのクエリのログ機能については、構成設定を変更してサーバーを再起動することにより、PostgreSQL 内でログを有効にする必要があります。
構成ファイルを見つける
postgresql.conf
構成ファイルが見つからない場合は、簡単な方法でその場所を見つけることができます。 まず、postures client
に接続し、次のコマンドを実行します。
postgres=# SHOW config_file;
コマンドを実行した後、postgresql.conf
ファイルへのパスを取得します。 次のコマンドを使用してテキスト エディター (nano
を使用しています) でファイルを開き、設定の変更を開始します。
$ nano /etc/postgresql/version/main/postgresql.conf
データ ディレクトリ パスの検索
Postgres インストール データ ディレクトリのパスを確認してください。 次に、構成ファイルを取得したように、データ ディレクトリを取得します。
postgres=# SHOW data_directory;
これにより、データ ディレクトリのパスが提供されます。 ただし、ディレクトリと構成ファイルは同じインストール パスにあります。 したがって、後で使用するために、データ ディレクトリと構成ディレクトリをコピーします。
PostgreSQL の構成とログ出力の生成
postgresql.conf
ファイルを開き、ERROR REPORTING AND LOGGING
というセクションまでスクロールします。 ここでは、いくつかの構成設定がコメントされていることがわかります。
これらの設定のうち、いくつかは重要です: logging_collector
と log_destination
。 さらに、設定すべき推奨設定がいくつかあります。
ただし、独自のニーズに合わせて変更することができます。 推奨設定は次のとおりです。
-
log_destination
='csvlog'
-
logging_collector
=on
-
log-directory
='pg_log'
-
log_filename
='postgresql-%Y-%m-%d_%H%M%S.log'
-
log_min_error_statement
=error
-
set log_min_duration_statement
=0
をパラメーターとして、すべてのステートメントをログに記録します -
この手順はオプションです。 次のコードを実行します。
SELECT set.config('log_statement','all, true );
上記のように変数に値を設定したら、PostgreSQL 構成を再読み込みします。 これは、次の方法で実行できます。
/usr/pgsqlversion/bin/pg_ctl reload -D /var/lib/pgsql/version/data/
これらの設定により、タイムスタンプとログ ファイルの適切な名前を生成するために、log_filename
設定のコメントを外しました。 また、Postgres でログを CSV
形式で生成し、データ ディレクトリ内の pg_log
ディレクトリに出力します。
data/postgresql.conf
ファイルで、設定 log_statement
を 'all'
に変更します。 これが完了したら、他に確認すべき設定がいくつかあります。
log_destination
、logging_collector
、および変数が on
になっていることを確認してください。 log_directory
がデータ ディレクトリ内に存在し、Postgres ユーザーが書き込みできることを確認する必要があります。
PostgreSQL を再起動する
Postgres がすべてのクエリをログに記録するための最後の手順は、PostgreSQL サービスを再起動することです。 続行すると、変更した構成ファイルの設定が有効になることが重要です。
ただし、Postgres の再起動は、さまざまなシステムで異なる場合があります。 通常、Unix システムには、ジョブを実行するコマンドがあります。 コマンドは次のようになります。
$ service postgresql restart
ログ生成の確認
Postgres システムを再起動すると、変更の効果が発生するはずです。 再起動後、すぐにロギングが開始されます。 これを確実に行うには、特定の Postgres インストールの data/pg_log
ディレクトリに進みます。
数ステップ前に、データ ディレクトリ パスを保存するように求めました。 これはあなたがそれを使用する場所です。 次に、最後に /pg_log
を追加してそのディレクトリに移動し、ログ ディレクトリに移動します。
$ cs /var/lib/postgresql/version/main/pg_log
ファイルの一覧表示に進みます。
$ ls -l
前回の Postgres サービスの再起動後に、ログ ファイルが作成されます。 これらの自動生成されたログ ファイルは、いくつかの構成設定を変更することで、Postgres がすべてのクエリを記録できるように作成されています。
時間の経過とともに、ログ ファイルは大きくなる傾向があり、最終的にはマシンが停止する可能性があります。 これが起こらないようにするには、安全のためにログを削除して postgresql サーバーを再起動する bash スクリプトを作成します。
bash スクリプトを書きたくないがログ ファイルを毎月上書きしたい場合の別の方法は、'log_filename='postgresql-%d.log'
という簡単な手順を実行することです。
再起動のたびに上書きされるのではなく、毎日追加され、毎月上書きされます。 上記のすべては、postgreSQL のデフォルト データベースからソリューションをログに記録します。
他の人もログに記録するには、そのソリューションから始めて、次を実行する必要があります。
ALTER DATABASE databasename
SET log_statement = 'all';
Postgres ログをナビゲートしている間、すべてのクエリ プロセスが混乱しているように見える場合があります。 この記事は、物事を簡単にするために設計されています。 段階的なプロセスを提供しているので、PostgreSQL でクエリをログに記録することができます。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub