本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
postgresql.conf
#log_statement = 'none' # none, ddl, mod, all
none 記録なし
ddl CREATE、ALTER、DROPなど、データ定義文を全て記録
mod 全ddl文および、INSERT、UPDATE、DELETE、TRUNCATE、に加えCOPY FROMといった、データ変更文を記録
all 全SQL文を記録
自分の環境では mod を選択してあります。更新など変更が加わった時にログを残す感じです。さすがにselect 分まで残してしまうとログが膨大になるので、バランス見てmodにしてあります。
log_min_error_statement = ERROR
log_min_error_statementの表示レベルは以下の通り
DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC
エラーを起こすとどうなる?
all設定で、SQL構文に間違いがあるとどうなるか確認してみた
log_statement = 'all'
log_min_error_statement = error
発行したSQL select * from test
test テーブルは存在しない場合
[2023-11-27 13:12:24 JST]172.21.100.25 jp 972[6]LOG: 文: select * from test
[2023-11-27 13:12:24 JST]172.21.100.25 jp 972[7]ERROR: リレーション"test"は存在しません(15文字目)
[2023-11-27 13:12:24 JST]172.21.100.25 jp 972[8]文: select * from test
ログの種類
ログを記録するレベル
log_min_messages
log_min_error_statement
ログに記録する内容
さまざまなデバッグ出力を出力できる。結果の解析ツリー、クエリ リライターの出力、または実行された各クエリの実行プランが出力。
debug_print_parse
debug_print_rewritten
debug_print_plan
サーバーへの接続試行と、クライアント認証の正常な完了がログに記録
log_connections
セッションの終了がログに記録
log_disconnections
どの SQL ステートメントをログに記録するかを制御
log_statement
perform
PostgreSQL の PERFORM 文は、ストアドファンクション内でファンクションを呼び出すために使用します。PERFORM 文は、返り値が void のファンクションを呼び出すために使用します。
Pl/PgSQLを実行しても実行されたSQLはログに残らない
ストアドプロシージャ内に配置したSQL文は、postgresql.conf設定
log_statement = 'all'
設定にしていても、ログには残らない。
ストアドプロシージャが実行されたログだけは残るけど。
select total.fx_stored();
を実行した時のログ
[2023-11-29 12:02:01 JST][local] jp 13897[1]LOG: 文: select total.fx_stored();
エラー起こしてみる
ストアドプロシージャの中に、エラーを吐くSQLを追加してみる
SELECT aa FROM test.com
そもそも、test.com というテーブルなど存在しない場合
[2023-11-29 14:23:12 JST]jp 14525[13]ERROR: リレーション"test.com"は存在しません(16文字目)
[2023-11-29 14:23:12 JST]jp 14525[14]問い合わせ: SELECT aa FROM test.com
[2023-11-29 14:23:12 JST]jp 14525[15]文脈: PL/pgSQL関数total.fx_stored()の73行目 - SQL ステートメント
ストアドプロシージャ内にSQLを書いていても、そのSQLが実行されたかどうかの記録はログに残らない。ただし、ストアドプロシージャ内にエラーがある場合は、エラー内容がログに残る。