表9-44に、実行時設定パラメータの問い合わせや変更に使用できる関数を示します。
表 9-44. パラメータを設定する関数
名前 | 戻り値型 | 説明 |
---|---|---|
current_setting(setting_name) | text | 現在の設定値 |
set_config(setting_name, new_value, is_local) | text | パラメータを設定し、その新規値を返す |
current_settingは、setting_nameの現在の設定値を返します。この関数は、SQLのSHOWコマンドと同じです。以下に例を示します。
SELECT current_setting('datestyle'); current_setting ----------------- ISO, MDY (1 row)
set_config関数により、setting_nameパラメータの設定をnew_valueに変更することができます。ただし、is_localがtrueに設定されている場合、新規値は現在のトランザクションにのみ適用されます。新規値を現在のセッションに適用する場合は、代わりにfalseを使用してください。この関数は、SQLのSETコマンドと同じです。以下に例を示します。
SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row)
表9-45に示す関数は、制御用シグナルを他のサーバプロセスに送信します。この関数の使用はスーパーユーザのみに制限されています。
表 9-45. サーバシグナル送信関数
名前 | 戻り値型 | 説明 |
---|---|---|
pg_cancel_backend(pid int) | boolean | バックエンドの現在の問い合わせをキャンセル |
pg_reload_conf() | boolean | サーバプロセスに構成ファイルの再読み込みをさせる |
pg_rotate_logfile() | boolean | サーバログファイルを回転させる |
これらのぞれぞれの関数は成功の場合 trueを返し、そうでない場合はfalseを返します。
pg_cancel_backendは問い合わせ取り消し(SIGINT)シグナルをプロセス識別子で特定されたバックエンドプロセスに送ります。動いているバックエンドのプロセス識別子はpg_stat_activityビューのprocpid列から、もしくはpsによりサーバ上のpostgresプロセスをリストすることで見つけられます。
pg_reload_confはSIGHUPシグナルをpostmasterに送り、その結果全てのサーバプロセスが構成ファイルを再読み込みすることになります。
pg_rotate_logfileはログファイルマネージャに即座に新規出力ファイルに切替えるよう信号を発します。これはログ取得に redirect_stderrが使用されている場合にのみ有効です。そうでない場合にはログファイルマネージャの子プロセスが存在しないからです。
表9-46に示す関数はオンラインバックアップの作成を補助するものです。これらの関数の使用はスーパーユーザに制限されています。
表 9-46. バックアップ制御関数
名前 | 戻り値型 | 説明 |
---|---|---|
pg_start_backup(label text) | text | オンラインバックアップの実行準備を実施 |
pg_stop_backup() | text | オンラインバックアップの実行を停止 |
pg_start_backupは、ユーザが任意に定義したバックアップラベルである、パラメータを1つ受け付けます(通常、格納に使用するバックアップダンプファイルにちなんだ名前が付けられます)。この関数は、データベースクラスタのデータディレクトリにバックアップラベルファイルを書き出し、バックアップを始めるWALオフセットをテキスト形式で返します(ユーザはこの結果値に注意する必要はありません。しかし、使用されることもありますのでこの値が提供されています)。
pg_stop_backupは、pg_start_backupで作成されたラベルファイルを削除し、代わりに、WALアーカイブ領域にバックアップ履歴ファイルを作成します。履歴ファイルにはpg_start_backupで付与されたラベル、バックアップのWALオフセットの開始位置、終了位置、バックアップ開始時刻、終了時刻が含まれます。戻り値は、バックアップの終了WALオフセットです(これも同様に稀に使用されることがあります)。
この関数の正しい使用方法については、項23.3を参照してください。
表9-47で示された関数はデータベースオブジェクトの実際のディスク領域を計算します。
表 9-47. データベースオブジェクト容量関数
名前 | 戻り値型 | 説明 |
---|---|---|
pg_column_size(any) | int | 特定の値を格納するのに使用される(ひょっとしたら圧縮された)バイト数 |
pg_tablespace_size(oid) | bigint | 指定されたOIDを持つテーブル空間で使用されるディスク領域 |
pg_tablespace_size(name) | bigint | 指定された名前を持つテーブル空間で使用されるディスク領域 |
pg_database_size(oid) | bigint | 指定されたOIDを持つでデータベースで使用されるディスク領域 |
pg_database_size(name) | bigint | 指定された名前を持つデータベースで使用されるディスク領域 |
pg_relation_size(oid) | bigint | 指定されたOIDを持つテーブルもしくはインデックスで使用されるディスク領域 |
pg_relation_size(text) | bigint | 指定された名前を持つテーブルもしくはインデックスで使用されるディスク領域。テーブル名はスキーマ名で条件付けられることもあります。 |
pg_total_relation_size(oid) | bigint | 特定されたOIDを持つテーブルで使用されるディスク領域で、インデックスとtoastされたデータを含みます。 |
pg_total_relation_size(text) | bigint | 特定された名前を持つテーブルで使用されるディスク領域で、インデックスとtoastされたデータを含みます。テーブル名はスキーマ名で条件付けられることもあります。 |
pg_size_pretty(bigint) | text | 容量単位で目で見て理解できる形式にバイト数に領域を変換します。 |
pg_column_sizeはどんな個別のデータ値を格納するのにも使用される領域を示します。
pg_tablespace_sizeとpg_database_sizeはOID、テーブル空間名、もしくはデータベースを受け付けて、それらが使用する全てのディスク領域を返します。
pg_relation_sizeはOIDもしくはテーブル名、インデックスもしくはtoastテーブルを受け付け、バイト単位の容量を返します。
pg_total_relation_sizeはOIDもしくはテーブル名、もしくはtoastテーブルを受け付け、データと全ての関連したインデックスおよびtoastテーブルのバイト数を返します。
pg_size_prettyは、適切にkB、MB、GB、もしくはTB単位を使用して目で見た判るようにその他の関数の1つの結果を整形するのに使用することができます。
表9-48で示されている関数はサーバをホスティングしているマシン上のファイルに対し、本来的に適用するファイルアクセスを提供します。データベースクラスタディレクトリとlog_directoryに存在するファイルのみがアクセス可能です。クラスタディレクトリ内のファイルに対して相対パスを、そしてログファイルに対してはlog_directory構成設定に一致するパスを使用してください。
表 9-48. 汎用ファイルアクセス関数
名前 | 戻り値型 | 説明 |
---|---|---|
pg_ls_dir(dirname text) | setof text | ディレクトリ内容のリスト |
pg_read_file(filename text, offset bigint, length bigint) | text | テキストファイルの内容を返す |
pg_stat_file(filename text) | record | ファイル情報を返す |
pg_ls_dirは、特別なエントリである"."および".."を除いた、指定されたディレクトリの全ての名前を返します。
pg_read_fileは与えられたoffsetから始まり、最大lengthバイト(最初にファイルの終りに到達すればこれより少なくなります)テキストファイルの一部分を返します。offsetが負の場合にはファイルの終りまで関係します。
pg_stat_fileはファイル容量、最後にアクセスされたタイムスタンプ、最後に変更されたタイムスタンプ、最後にタイムスタンプを変更したファイルステータス(これはUnixのみ)、およびもしディレクトリであればそれを示す論理値を返します。典型的な使用法を示します。
SELECT * FROM pg_stat_file('filename'); SELECT (pg_stat_file('filename')).modification;