PostgreSQL 実行されたSQLをログに出力(データベース接続ユーザー単位の設定)

PostgreSQL 実行されたSQLをログに出力(データベース接続ユーザー単位の設定)

当サイトのPostgreSQL 実行されたSQLをログに出力(システム全体の設定)では、PostgreSQLの設定ファイルを使用して、実行されたSQLをログに出力するように指定し、システム全体に適用されるようにしていますが、ここではデータベース接続ユーザー単位で設定する方法を以下に示します。

※設定の詳細については、当サイトのPostgreSQL 実行されたSQLをログに出力(システム全体の設定)をご覧ください。

※データベース単位で設定を行う方法については、当サイトのPostgreSQL 実行されたSQLをログに出力(データベース単位の設定)をご覧ください。

※ここで説明に使用しているPostgreSQLは、当サイトのCentOS7 64bitのyumリポジトリにPostgreSQLを追加し、最新バージョンをインストールのページを元にインストールした、バージョン9.4になります。

※データベース接続ユーザーの作成については、当サイトのPostgreSQL データベース接続ユーザーの作成のページをご覧ください。

※データベースの作成については、当サイトのPostgreSQL データベースの作成のページをご覧ください。

※テーブルの作成については、当サイトのPostgreSQL テーブルの作成のページをご覧ください。

実行されたSQLをログに出力する設定をデータベース接続ユーザーに対してSQLで行う

実行されたSQLをログに出力する設定は、データベース接続ユーザーに対してSQLで行うこともできます。

以下のようなSQLを実行します。

postgres=# ALTER ROLE user01 SET log_statement = 'all',
  • 「ALTER ROLE」に続けて、設定の変更を行いたいデータベース接続ユーザーの名前を指定します。

    ここではデータベース接続ユーザー「user01」の設定の変更を行うようにしています。

  • 「SET」に続けて変更したい値を「パラメーター名 = 値」または「パラメーター名 TO 値」の形で指定します。

    ここでは「log_statement」に「all」と指定するようにしています。

    「ALTER ROLE」文でデータベース接続ユーザーの設定の変更を行える対象は、スーパーユーザーの場合は全てのユーザー、CREATEROLE権限を持つユーザーの場合はスーパーユーザー以外のユーザー、通常のユーザーの場合は自身のユーザーのみになります。

    設定するパラメーターによっては、スーパーユーザーのみが変更可能となり、ここでの「log_statement」は、スーパーユーザーのみが変更可能となっています。

  • 設定の反映は、新しくデータベースに接続した際に行われます。

※「log_directory」や「log_filename」は、ALTER ROLE文で設定することはできないため、ログファイルを保存するディレクトリやログファイルの名前をデータベース接続ユーザー別に指定することはできません。

データベース接続ユーザーに対する設定の確認

データベース接続ユーザーに対する設定を確認するには、以下のSQLを実行します。

postgres=# SELECT * FROM pg_db_role_setting, setdatabase | setrole | setconfig -------------+---------+--------------------- 0 | 16638 | {log_statement=all}
  • 「pg_db_role_setting」は、データベースとロールに対して設定されているパラメーターの情報を保持しているシステムカタログになります。

  • 「setrole」の値は、システムカタログ「pg_authid」で管理されているロールのOIDになります。

    ここではOID「16638」を持つデータベース接続ユーザー「user01」に対し、「log_statement」の値が「all」に設定されていることを示しています。

現在の接続で使用されているパラメーターの値を確認するには、以下のようなSQLを実行します。

db01=>, SHOW log_statement, log_statement --------------- all
  • 「SHOW」に続けて、値を確認するパラメーターの名前を指定します。

    ここではパラメーター「log_statement」の値を確認するようにしています。

以下のようなSQLで、より詳細な設定の情報を確認することもできます。

db01=>, SELECT * FROM pg_settings WHERE name = 'log_statement', name | setting | unit | category | short_desc | extra_desc | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | sourcefile | sourceline ---------------+---------+------+-------------------------------------+-------------------------------------+------------+-----------+---------+--------+---------+---------+--------------------+----------+-----------+------------+------------ log_statement | all | | Reporting and Logging / What to Log | Sets the type of statements logged. | | superuser | enum | user | | | {none,ddl,mod,all} | none | all | |
  • 「pg_settings」は、パラメーターの情報を取得するビューになります。

  • WHERE句の「name」で、設定の情報を確認するパラメーターの名前を指定します。

    ここではパラメーター「log_statement」の設定の情報を確認するようにしています。

  • 「source」が「user」となっている場合は、データベース接続ユーザーに対する設定が使用されていることを示しています。

ALTER ROLE文で設定した内容の削除

ALTER ROLE文で設定した内容を削除するには、以下のようなSQLを実行します。

postgres=# ALTER ROLE user01 RESET log_statement,

または

postgres=# ALTER ROLE user01 SET log_statement = DEFAULT,
  • 「ALTER ROLE」に続けて、設定の削除を行いたいデータベース接続ユーザーの名前を指定します。

    ここではデータベース接続ユーザー「user01」の設定の削除を行うようにしています。

  • 「RESET」に続けて削除したいパラメーター名を指定、または「SET」に続けて削除したいパラメーターを「パラメーター名 = DEFAULT」または「パラメーター名 TO DEFAULT」の形で指定します。

    ここでは「log_statement」の設定を削除するようにしています。

ALTER ROLE文で複数のパラメーターを設定している場合に、全ての設定を削除するには、以下のようなSQLを実行します。

postgres=# ALTER ROLE user01 RESET ALL,
  • 「ALTER ROLE」に続けて、設定の削除を行いたいデータベースの名前を指定します。

    ここではデータベース接続ユーザー「user01」の設定の削除を行うようにしています。

  • 「RESET」に続けて「ALL」を指定します。

PostgreSQL 実行されたSQLをログに出力(データベース接続ユーザー単位の設定)については、以上です。

SQLのテクニックに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのテクニックに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

SQLのパフォーマンスに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのパフォーマンスに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

DB設計、SQLに関するおすすめの書籍

当サイトの書籍紹介ページで、DB設計、SQLに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。