kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

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 DATABASE db01 SET log_statement = 'all';
  • 「ALTER DATABASE」に続けて、設定の変更を行いたいデータベースの名前を指定します。

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

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

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

    「ALTER DATABASE」文でデータベースの設定の変更を行えるのは、スーパーユーザーまたはデータベースの所有者のみになります。

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

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

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

データベースに対する設定の確認

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

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

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

    ここではOID「16640」を持つデータベース「db01」に対し、「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    | database |         |         | {none,ddl,mod,all} | none     | all       |            |
  • 「pg_settings」は、パラメーターの情報を取得するビューになります。

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

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

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

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

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

postgres=# ALTER DATABASE db01 RESET log_statement;

または

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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