本節で説明する関数は、PostgreSQLインストレーションの制御と監視を行うために使用されます。
表 9.89は、実行時設定パラメータの問い合わせや変更に使用できる関数を示しています。
表9.89 構成設定関数
関数
説明
例
|
---|
current_setting ( setting_name text [, missing_ok boolean ] )
→ text
現在のsetting_name の設定値を返します。
そのような設定がなければ、missing_ok が渡され、それがtrue でない限りcurrent_setting はエラーを引き起こします(この場合はNULLが返ります)。
この関数はSQLコマンドのSHOWに関連します。
current_setting('datestyle')
→ ISO, MDY
|
set_config (
setting_name text ,
new_value text ,
is_local boolean )
→ text
setting_name パラメータにnew_value を設定し、その値を返します。
is_local が渡され、それがtrue なら新しい値は現在のトランザクションの間にのみ適用されます。
現在のセッションで以降に新しい値を適用したければ、代わりにfalse としてください。
このコマンドはSQLコマンドのSETに関連します。
set_config('log_statement_stats', 'off', false)
→ off
|
表 9.90に示す関数は、制御用シグナルを他のサーバプロセスに送信します。
これらの関数の使用は、デフォルトでスーパーユーザのみに制限されていますが、注記された例外を除き、GRANT
を使用して他のユーザにアクセスを許可できます。
これらのそれぞれの関数はシグナルの送付が成功の場合true
を返し、シグナルの送付に失敗したときにはfalse
を返します。
表9.90 サーバシグナル送信関数
関数
説明
|
---|
pg_cancel_backend ( pid integer )
→ boolean
指定したプロセスIDを持つバックエンドプロセスの現在のセッションの問い合わせを取り消します。
呼び出し側のロールがキャンセルされるバックエンドのロールのメンバであるか、pg_signal_backend の権限を与えられている場合に実行できます。
ただし、スーパーユーザのバックエンドはスーパーユーザのみが取り消せます。
|
pg_log_backend_memory_contexts ( pid integer )
→ boolean
指定プロセスIDのバックエンドのメモリコンテキストを記録することを要求します。
この関数はバックエンドとロガー以外の外部プロセスに要求を送ることができます。
メモリコンテキストはLOG メッセージレベルでログされます。
ログは、ログ設定(詳細は20.8を参照)に基づきサーバログに現れますが、client_min_messagesに関わらずクライアントには送られません。
|
pg_reload_conf ()
→ boolean
PostgreSQLのすべてのサーバプロセスに構成ファイルの再読み込みをさせます。
(これはSIGHUPシグナルをpostmasterプロセスに送ることによって始まり、postmasterは続いてSIGHUPを子に送ります。)
再ロードする前に、pg_file_settings 、pg_hba_file_rules 、pg_ident_file_mappings ビューを使用して、構成ファイルにエラーがないか確認することができます。
|
pg_rotate_logfile ()
→ boolean
ログファイルマネージャにシグナルを送って新しいファイルに直ちに切り替えさせます。
これは組み込みのログ収集機構が実行中のみ動作します。でないとログマネージャサブプロセスが存在しないからです。
|
pg_terminate_backend ( pid integer , timeout bigint DEFAULT 0 )
→ boolean
バックエンドが指定したプロセスIDを持つセッションを終了させます。
呼び出し側のロールが終了されるバックエンドのロールのメンバであるか、pg_signal_backend の権限を与えられている場合に実行できます。
ただし、スーパーユーザのバックエンドはスーパーユーザのみが終了できます。
timeout が与えられないか、ゼロなら、この関数はプロセスが実際に終了したかどうかに関わらず、この関数はシグナルの送付が成功したことのみを意味するtrue を返します。
timeout が指定され、ゼロよりも大きければ、この関数はプロセスが実際に終了するか、指定時間が経過するまで待ちます。
プロセスが終了したら、この関数はtrue を返します。
タイムアウトの場合は、警告が出力され、false が返ります。
|
pg_cancel_backend
とpg_terminate_backend
は(それぞれ、SIGINTまたはSIGTERM)シグナルをプロセス識別子で特定されたバックエンドプロセスに送ります。
使用中のバックエンドのプロセス識別子はpg_stat_activity
ビューのpid
列から、もしくは、(Unixではps、WindowsではTask Managerにより)サーバ上のpostgres
プロセスをリストすることで見つけられます。
実行中のバックエンドのロールはpg_stat_activity
のusename
列から確認することができます。
バックエンドプロセスのメモリコンテキストのログを取るためにpg_log_backend_memory_contexts
を利用できます。
例を示します。
postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid());
pg_log_backend_memory_contexts
--------------------------------
t
(1 row)
各々のメモリコンテキストについて一つのメッセージがログされます。例を示します。
LOG: logging memory contexts of PID 10377
STATEMENT: SELECT pg_log_backend_memory_contexts(pg_backend_pid());
LOG: level: 0; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used
LOG: level: 1; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used
LOG: level: 1; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used
LOG: level: 1; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used
LOG: level: 1; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used
LOG: level: 1; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used
LOG: level: 1; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used
LOG: level: 1; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used
...
LOG: level: 1; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used
LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used
同じ親に100よりも多い子コンテキストがあると、最初の100子コンテキストがログされ、残りのコンテキストについてはサマリが付加されます。
この関数を頻繁に呼び出すと、大きなオーバーヘッドを引き起こす可能性があることに注意してください。
大量のログメッセージが生成される可能性があるからです。
表 9.91に示されている関数はオンラインバックアップの作成を支援します。
これらの関数はリカバリ中には実行できません(pg_backup_start
、pg_backup_stop
、pg_wal_lsn_diff
を除きます)。
これらの関数の正しい使用方法については、26.3を参照してください。
表9.91 バックアップ制御関数
関数
説明
|
---|
pg_create_restore_point ( name text )
→ pg_lsn
先行書き込みログ中に後でリカバリターゲットとして使用できる名前付けされたマーカーレコードを作成し、関連する先行書き込みログの位置を返します。
与えられた名前はリカバリをどこまで進めるかを指定するためにrecovery_target_nameとともに利用できます。
同じ名前で複数のリストアポイントを作成するのは避けてください。リカバリターゲットが一致した最初のところでリカバリが停止するからです。
この関数はデフォルトではスーパーユーザのみ実施可能ですが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。
|
pg_current_wal_flush_lsn ()
→ pg_lsn
先行書き込みログの現在のフラッシュ位置を取得します。(下の注釈を参照してください。)
|
pg_current_wal_insert_lsn ()
→ pg_lsn
現在の先行書き込みログの挿入位置を取得します。(下の注釈を参照してください。)
|
pg_current_wal_lsn ()
→ pg_lsn
現在の先行書き込みログの書き込み位置を取得します。(下の注釈を参照してください。)
|
pg_backup_start (
label text
[, fast boolean
] )
→ pg_lsn
サーバがオンラインバックアップを開始するのを準備します。
必須パラメータはユーザが任意に定義したバックアップラベルだけです。
(通常、格納に使用するバックアップダンプファイルにちなんだ名前が付けられます。)
オプションの2番目のパラメータがtrue として与えられると、pg_backup_start を可能な限り素早く実行することが指定されます。
これによりI/O操作の急上昇をもたらして同時に実行中のすべての問い合わせを遅くする即時チェックポイントが強制されます。
この関数はデフォルトではスーパーユーザのみ実施可能ですが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。
|
pg_backup_stop (
[wait_for_archive boolean
] )
→ record
( lsn pg_lsn ,
labelfile text ,
spcmapfile text )
オンラインバックアップの実行を終了します。
バックアップラベルファイルとテーブル空間マップファイルの必要な内容は関数の結果の一部として返され、バックアップ領域内のファイルに書き込まれなければなりません。
これらのファイルはライブデータディレクトリに書き込まれてはなりません(ライブデータディレクトリに書き込まれるとクラッシュ時にPostgreSQLの再起動に失敗します)。
オプションでboolean 型パラメータがあります。
falseの場合、この関数はバックアップの完了後、WALがアーカイブされるのを待たずに、即座に戻ります。
この動作はWALのアーカイブを独立して監視するバックアップソフトウェアに対してのみ有用です。
それ以外の場合、バックアップを一貫性のあるものにするために必要なWALが欠けるためにバックアップが役立たなくなるかもしれません。
デフォルトあるいはこのパラメータがtrueのとき、アーカイブが有効なら、pg_backup_stop はWALがアーカイブされるまで待機します。
(スタンバイでは、これはつまりarchive_mode = always のときのみ待機するということです。
プライマリでの書き込み活動が少ないときは、セグメントの変更を即座に起こさせるためにプライマリでpg_switch_wal を実行するのが有効かもしれません。)
プライマリで実行された場合、この関数はまた、先行書き込みログの格納領域にバックアップ履歴ファイルを作成します。
履歴ファイルにはpg_backup_start で付与されたラベル、バックアップの先行書き込みログの位置の開始位置、終了位置、バックアップ開始時刻、終了時刻が含まれます。
終了位置を記録した後、現在の先行書き込みログの挿入位置は自動的に、次の先行書き込みログファイルに進みます。
従って、終了先行書き込みログファイルをすぐにアーカイブし、バックアップを完了させることができます。
この関数の結果は単一レコードです。
lsn 列はバックアップの終了先行書き込みログの位置です(これもまた無視可能です)。
2番目の列はバックアップラベルファイルの内容を返し、3番目の列はテーブル空間マップファイルの内容を返します。
これらはバックアップの一部として保存されなければならず、リストアプロセスの一部で必要となるものです。
この関数はデフォルトではスーパーユーザのみ実施可能ですが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。
|
pg_switch_wal ()
→ pg_lsn
サーバに対して新しい先行書き込みログファイルへ強制スイッチを行い、それによってその現在のファイルがアーカイブされるようにします。
(継続的アーカイブを利用中だと仮定します。)
結果は今ちょうど終了した先行書き込みログファイル内の終了先行書き込みログファイルの場所プラス1です。
最後の先行書き込みログファイルのスイッチ以降先行書き込みログファイル活動がなければ、pg_switch_wal は何もせず、現在使用中の先行書き込みログファイルの先頭位置を返します。
この関数はデフォルトではスーパーユーザのみ実施可能ですが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。
|
pg_walfile_name ( lsn pg_lsn )
→ text
先行書き込みログファイルの位置を、その位置を保持しているWALファイルの名前に変換します。
|
pg_walfile_name_offset ( lsn pg_lsn )
→ record
( file_name text ,
file_offset integer )
先行書き込みログファイルの位置を、そのファイルの名前とそのファイル内のバイトオフセットに変換します。
|
pg_split_walfile_name ( file_name text )
→ record
( segment_number numeric ,
timeline_id bigint )
WALファイル名からシーケンス番号とタイムラインIDを抽出します。
|
pg_wal_lsn_diff ( lsn1 pg_lsn , lsn2 pg_lsn )
→ numeric
2つの先行書き込みログの位置のバイト単位の差分(lsn1 - lsn2 )を計算します。
これはpg_stat_replication や表 9.91内の関数でレプリケーションの遅延を取得するために使用することができます。
|
pg_current_wal_lsn
は、上記の関数で使用されるのと同じ書式で現在の先行書き込みログの書き込み位置を表示します。
同様にpg_current_wal_insert_lsn
は、現在の先行書き込みログの挿入位置を表示し、pg_current_wal_flush_lsn
はトランザクションログの現在のフラッシュ位置を表示します。
挿入位置は 「論理的」な任意の時点の先行書き込みログの終了位置です。
一方、書き込み位置は、サーバの内部バッファから書き出された実際の終了位置、またフラッシュ位置は永続的ストレージへの書き込みが保証される位置です。
書き込み位置はサーバ外部から検証可能なものの終端です。通常は、部分的に完了した先行書き込みログファイルのアーカイブ処理を行いたい場合に必要とされるものです。
挿入およびフラッシュ位置はサーバをデバッグする際に主に使用されます。
これらはどちらも読み取りのみの操作であり、スーパーユーザ権限を必要としません。
pg_walfile_name_offset
を使用して、pg_lsn
値から、対応する先行書き込みログファイル名とバイトオフセットを取り出すことができます。
以下に例を示します。
postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn);
file_name | file_offset
--------------------------+-------------
00000001000000000000000D | 4039624
(1 row)
同様に、pg_walfile_name
は、先行書き込みログファイル名のみを取り出します。
指定した先行書き込みログの位置が正確に先行書き込みログファイルの境界であった場合、これらの両関数は前の先行書き込みログファイルの名前を返します。
通常これは、先行書き込みログファイルのアーカイブ動作では好まれる動作です。
前のファイルが現在のアーカイブで必要とする最後のファイルであるからです。
pg_split_walfile_name
は、ファイルオフセットとWALファイル名からLSNを計算するのに有用です。例を示します。
postgres=# \set file_name '000000010000000100C000AB'
postgres=# \set offset 256
postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn
FROM pg_split_walfile_name(:'file_name') pd,
pg_show_all_settings() ps
WHERE ps.name = 'wal_segment_size';
lsn
---------------
C001/AB000100
(1 row)
表 9.92に示される関数は、スタンバイサーバの現在のステータス情報を提供します。
これらの関数はリカバリ中、および通常稼働時に実行することができるでしょう。
表9.92 リカバリ情報関数
関数
説明
|
---|
pg_is_in_recovery ()
→ boolean
まだリカバリ実施中であれば真を返します。
|
pg_last_wal_receive_lsn ()
→ pg_lsn
ストリーミングレプリケーションにより受信されディスクに同期書き込みされた、先行書き込みログの最後の位置を返します。
ストリーミングレプリケーションがまだ実行中の場合、この関数の戻り値は単調に増加します。
リカバリが完了した場合は、受信されディスクに書き込まれた最後のWALレコードの位置の値のまま変化しません。
ストリーミングレプリケーションが無効、もしくは開始されていない場合、この関数はNULL を返します。
|
pg_last_wal_replay_lsn ()
→ pg_lsn
リカバリ中に再生された最後の先行書き込みログの位置を返します。
リカバリがまだ実行中の場合、この関数の戻り値は単調に増加します。
リカバリが完了した場合は、リカバリ時に適用された最後のWALレコードの値のまま変化しません。
サーバがリカバリ処理無しに正常に開始された場合、この関数はNULL を返します。
|
pg_last_xact_replay_timestamp ()
→ timestamp with time zone
リカバリ中に再生された最後のトランザクションのタイムスタンプを返します。
このタイムスタンプは、プライマリにて該当するトランザクションがコミット、もしくはアボートされた際のWALレコードが生成された時刻です。
リカバリ中に何のトランザクションも再生されていない場合、この関数はNULL を返します。
リカバリがまだ実行中の場合、この関数の戻り値は単調に増加します。
リカバリが完了している場合、この関数の戻り値はリカバリ中に再生した最後のトランザクションの時間のまま変化しません。
サーバがリカバリ処理無しに正常に開始された場合、この関数はNULL を返します。
|
pg_get_wal_resource_managers ()
→ setof record
( rm_id integer ,
rm_name text ,
rm_builtin boolean )
システムに現在ロードされているWALリソースマネージャを返します。
列rm_builtin は、それが組み込みのリソースマネージャか、拡張によってロードされたカスタムリソースマネージャかを示します。
|
表 9.93に示す関数は、リカバリの進行を制御する関数です。
これらの関数はリカバリ中のみ実行することが可能です。
表9.93 リカバリ制御関数
関数
説明
|
---|
pg_is_wal_replay_paused ()
→ boolean
リカバリの中断が要求された場合は真を返します。
|
pg_get_wal_replay_pause_state ()
→ text
リカバリの休止状態を返します。
休止が要求されていないければ、返り値はnot paused です。
休止が要求されていてリカバリがまだ休止していなければ、返り値はpause requested です。
リカバリが実際に休止していれば、返り値はpaused です。
|
pg_promote ( wait boolean DEFAULT true , wait_seconds integer DEFAULT 60 )
→ boolean
スタンバイサーバをプライマリ状態に昇格します。
wait にtrue (デフォルト)を設定すると、この関数は昇格が完了するか、wait_seconds 秒が経過するまで待ち、昇格に成功すればtrue 、さもなければfalse を返します。
wait にfalse を設定すると、この関数は昇格を起こすためにpostmasterにSIGUSR1 を送信した後、直ちにtrue を返します。
この関数はデフォルトではスーパーユーザのみ実施可能ですが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。
|
pg_wal_replay_pause ()
→ void
リカバリの中断を要求します。
要求しても、それは直ちにリカバリが中断することを意味しません。
リカバリが実際に中断していることを保証したければ、 pg_get_wal_replay_pause_state() が返すリカバリ中断状態をチェックする必要があります。
pg_is_wal_replay_paused() は要求が行われたかどうかを返すことに注意してください。
リカバリが中断している間、データベースへの変更は適用されません。
ホットスタンバイが動作中はすべての新しい問い合わせはデータベースの一貫した同じスナップショットを参照することになり、リカバリが再開するまでそれ以上の問い合わせの衝突は起きません。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_wal_replay_resume ()
→ void
リカバリが中断中なら再開します。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_wal_replay_pause
とpg_wal_replay_resume
は昇格が進行中は実行できません。
リカバリ中断中に昇格が引き起こされると中断状態は終了し、昇格が継続します。
ストリーミングレプリケーションが無効の場合、停止状態は特に問題なく永久に継続します。
ストリーミングレプリケーションの進行中は、WALレコードの受信が継続され、停止時間、WALの生成速度、ディスクの残存容量によりますが、ディスク溢れが発生する可能性があります。
PostgreSQLはデータベースのセッションに対して、それらのスナップショットを同期させることが可能です。
スナップショットは、そのスナップショットを使用しているトランザクションにどのデータが可視かを決定します。
同期スナップショットは、2つ以上のセッションにおいて、全く同じデータベース内容を見たい場合に必要となります。
単に2つのセッションが独立してそれぞれのトランザクションを開始するだけでは、第3のトランザクションのコミットが、2つのトランザクションのSTART TRANSACTION
の狭間で実行され、そのため一方のトランザクションではそのコミット結果が見え、他方では見えないという可能性が常にあります。
このような問題を解決するため、PostgreSQLではトランザクションが使用しているスナップショットをエクスポートできるようになっています。エクスポートしたトランザクションが開かれ続けている限り、他のトランザクションがそれをインポートすることができ、
そしてこれにより最初のトランザクションと正確に同じとなるデータベースの可視性を保証されます。ただし、これらの(スナップショットを共有している)トランザクションによって発生したデータベースへの変更は、コミットされていないトランザクションによる変更と同様に、(スナップショットを共有している)他のトランザクションには見えないままです。
つまり、既存データに対しては同期されますが、それら自身による変更については通常の振る舞いをします。
スナップショットは、表 9.94に示すpg_export_snapshot
関数を用いてエクスポートされ、SET TRANSACTIONコマンドを用いてインポートされます。
表9.94 スナップショット同期関数
関数
説明
|
---|
pg_export_snapshot ()
→ text
現在のトランザクションのスナップショットを保存し、それを識別するtext 文字列を返します。
この文字列は(データベースの外側で)スナップショットを取り込みたいクライアントに渡さなければなりません。
エクスポートしたトランザクションが終わるまでの間のみ、そのスナップショットをインポートすることができます。
必要ならばトランザクションは複数のスナップショットをエクスポートできます。
これはREAD COMMITTED のトランザクションにおいてのみ有用であることに注意してください。
REPEATABLE READ およびそれ以上の分離レベルのトランザクションでは終了まで同じスナップショットを使うからです。
一旦スナップショットをエクスポートしたトランザクションでは、PREPARE TRANSACTIONによる準備を使用することができなくなります。
|
pg_log_standby_snapshot ()
→ pg_lsn
bgwriterやcheckpointerがログするのを待たずに、実行中のトランザクションのスナップショットを取得し、それをWALに書き込みます。
これは、ロジカルデコーディングのスタンバイに対して便利です。ロジカルのスロットの作成は、このようなレコードがスタンバイで再生されるまで待たなければならないからです。
|
表 9.95に示す関数はレプリケーション機能を制御したり、情報を取得したりするためのものです。
基盤となっている機能の情報に関しては27.2.5、27.2.6、第50章を参照してください。
これらの関数のレプリケーションオリジンでの使用はデフォルトでスーパーユーザにのみ許可されていますが、GRANT
コマンドを使って他のユーザに許可することもできます。
これらの関数のレプリケーションスロットでの使用はスーパーユーザとREPLICATION
権限を持つユーザに限定されています。
これらの関数の多くには、レプリケーションプロトコルに等価なコマンドがあります。
55.4を参照してください。
9.27.3、9.27.4、9.27.5に書かれている関数もレプリケーションに関係するものです。
表9.95 レプリケーション管理関数
関数
説明
|
---|
pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean , temporary boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
slot_name という名前の新しい物理レプリケーションスロットを作成します。
2番目のパラメータはオプションで、true の場合、このレプリケーションスロットのLSNが即座に予約されることを指定します。
それ以外の場合はLSNはストリーミングレプリケーションのクライアントから最初に接続された時に予約されます。
物理スロットからのストリーミングの変更はストリーミングレプリケーションプロトコルでのみ可能です。55.4を参照してください。
3番目のパラメータtemporary はオプションで、trueに設定されるとそのスロットは永続的にディスクに保存されるものではなく、現在のセッションによってのみ用いられることを意図していることを指定します。
一時的なスロットはエラーが発生したときも解放されます。
この関数の呼び出しは、レプリケーションプロトコルコマンドCREATE_REPLICATION_SLOT ... PHYSICAL と同じ効果があります。
|
pg_drop_replication_slot ( slot_name name )
→ void
slot_name という名前の物理もしくは論理レプリケーションスロットを削除します。
レプリケーションプロトコルコマンドDROP_REPLICATION_SLOT と同じです。
論理スロットの場合、この関数はスロットが作成されたのと同じデータベースに接続している時に呼ばなければなりません。
|
pg_create_logical_replication_slot ( slot_name name , plugin name [, temporary boolean , twophase boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
出力プラグインplugin を使ってslot_name という名前の新しい論理(デコーディング)レプリケーションスロットを作ります。
3番目のオプションパラメータtemporary をtrueに設定すると、このスロットを永続的にディスクに保存するべきではなく、現在のセッションでのみ使われることを意図します。
また、一時スロットはエラーが起きると解放されます。
オプションの4つ目の引数twophase がtrueならば、準備されたトランザクションのデコードがこのスロットで可能になります。
この関数の呼び出しはレプリケーションプロトコルコマンドのCREATE_REPLICATION_SLOT ... LOGICAL と同じ効果があります。
|
pg_copy_physical_replication_slot ( src_slot_name name , dst_slot_name name [, temporary boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
src_slot_name という名前の既存の物理レプリケーションスロットをdst_slot_name という名前の物理レプリケーションスロットにコピーします。
コピーされた物理スロットはソーススロットと同じLSNからWALの保存を開始します。
temporary はオプションです。
temporary を省略すると、ソーススロットと同じ値を使用します。
|
pg_copy_logical_replication_slot ( src_slot_name name , dst_slot_name name [, temporary boolean [, plugin name ]] )
→ record
( slot_name name ,
lsn pg_lsn )
src_slot_name という名前の既存の論理レプリケーションスロットをdst_slot_name という名前の論理レプリケーションスロットにコピーします。オプションで出力プラグインと永続性を変更します。
コピーされた論理スロットはソース論理スロットと同じLSNから開始します。
temporary とplugin はどちらもオプションです。
省略するとソース論理スロットと同じ値が使用されます。
|
pg_logical_slot_get_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data text )
変更が最後に消費された時点から開始して、スロットslot_name の変更を返します。
upto_lsn とupto_nchanges がNULLならば論理デコードはWALの最後まで続きます。
upto_lsn が非NULLであれば、デコードは指定されたLSNより前にコミットされたトランザクションのみを含みます。
upto_nchanges が非NULLであれば、デコードにより生成された行の数が指定された値を越えたときに、デコードは止まります。
しかしながら、新しいトランザクションの各コミットをデコードして生成された行を追加した後でしかこの制限は確認されませんので、実際に返される行の数は大きいかもしれないことに注意してください。
|
pg_logical_slot_peek_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data text )
変更が消費されないということを除いて、pg_logical_slot_get_changes() 関数と同じように振る舞います。すなわち、将来の呼び出しでは再び同じものが返ります。
|
pg_logical_slot_get_binary_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data bytea )
変更はbytea として返されるということを除いてpg_logical_slot_get_changes() 関数と同じように振る舞います。
|
pg_logical_slot_peek_binary_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data bytea )
変更はbytea として返されることを除いてpg_logical_slot_peek_changes() 関数と同じように振る舞います。
|
pg_replication_slot_advance ( slot_name name , upto_lsn pg_lsn )
→ record
( slot_name name ,
end_lsn pg_lsn )
slot_name という名前のレプリケーションスロットの現在の確認された位置を進めます。
スロットは後方には動きませんし、現在の挿入位置を超えて進むこともありません。
スロットの名前と前に進んだ実際の位置を返します。
前に進んだ場合は更新されたスロットに関する情報がこの後のチェックポイントで書き出されます。
クラッシュが発生すると、そのスロットは以前の位置に戻るかもしれません。
|
pg_replication_origin_create ( node_name text )
→ oid
指定した外部名でレプリケーション起点を作成し、割り当てられた内部IDを返します。
|
pg_replication_origin_drop ( node_name text )
→ void
以前に作成されたレプリケーション起点を、それに関連するすべての再生の進捗も含めて削除します。
|
pg_replication_origin_oid ( node_name text )
→ oid
レプリケーション起点を名前で検索し、内部IDを返します。
相当するレプリケーション起点が見つからない場合はNULL を返します。
|
pg_replication_origin_session_setup ( node_name text )
→ void
現在のセッションに、指定の起点から再生中であると印を付け、再生の進捗が追跡できるようにします。
起点が選択されていない場合にのみ使うことができます。
元に戻すにはpg_replication_origin_session_reset を使って下さい。
|
pg_replication_origin_session_reset ()
→ void
pg_replication_origin_session_setup() の効果を取り消します。
|
pg_replication_origin_session_is_setup ()
→ boolean
現在のセッションでレプリケーション起点が選択されていれば真を返します。
|
pg_replication_origin_session_progress ( flush boolean )
→ pg_lsn
現在のセッションで設定されたレプリケーション起点の再生位置を返します。
パラメータflush により、対応するローカルトランザクションがディスクにフラッシュされていることが保証されるかどうかを決定します。
|
pg_replication_origin_xact_setup ( origin_lsn pg_lsn , origin_timestamp timestamp with time zone )
→ void
現在のトランザクションに、指定のLSNおよびタイムスタンプでコミットしたトランザクションを再生中であると印をつけます。
事前にレプリケーション起点がpg_replication_origin_session_setup を使って選択されている場合にのみ呼び出せます。
|
pg_replication_origin_xact_reset ()
→ void
pg_replication_origin_xact_setup() の効果を取り消します。
|
pg_replication_origin_advance ( node_name text , lsn pg_lsn )
→ void
指定したノードのレプリケーションの進捗を、指定の位置に設定します。
これは主に設定変更の後で初期位置や新しい位置を設定するときなどに役立ちます。
この関数を不注意に使うと、レプリケーションデータが一貫性を失うかもしれないことに注意して下さい。
|
pg_replication_origin_progress ( node_name text , flush boolean )
→ pg_lsn
指定したレプリケーション起点の再生位置を返します。
パラメータflush により、対応するローカルトランザクションがディスクにフラッシュされていることが保証されるかどうかを決定します。
|
pg_logical_emit_message ( transactional boolean , prefix text , content text )
→ pg_lsn
pg_logical_emit_message ( transactional boolean , prefix text , content bytea )
→ pg_lsn
論理デコードのメッセージを送出します
これは汎用的なメッセージをWALを通して論理デコードのプラグインに渡すのに使うことができます。
パラメータtransactional は、メッセージが現在のトランザクションの一部なのか、あるいはすぐに書き込み、論理デコードがレコードを読んだらすぐにデコードされるべきものなのかを指定します。
prefix パラメータは文字通りの接頭辞で、論理デコードのプラグインが、自分にとって関心のあるメッセージを容易に認識できるように使われます。
content パラメータはメッセージの内容で、テキストまたはバイナリ形式で与えられます。
|
9.27.7. データベースオブジェクト管理関数 #
表 9.96で示された関数はデータベースオブジェクトのディスク領域の使用状況を計算したり、使用結果の表示あるいは理解を補助します。
bigint
の結果はバイト単位の大きさです。
関数に存在するオブジェクト以外のOIDが渡されるとNULL
が返ります。
表9.96 データベースオブジェクトサイズ関数
関数
説明
|
---|
pg_column_size ( "any" )
→ integer
個々のデータ値を格納するのに使用されるバイト数を表示します。
テーブルの列の値に直接適用すると、圧縮が行われていればそれを反映します。
|
pg_column_compression ( "any" )
→ text
個々の可変長値で使われた圧縮アルゴリズムを表示します。
値が圧縮されていなければ、NULL を返します。
|
pg_database_size ( name )
→ bigint
pg_database_size ( oid )
→ bigint
名前あるいはOIDで指定したデータベースによって使われている全ディスクスペースを計算します。
この関数を使うには、指定したデータベースにCONNECT 権限(デフォルトで付与されています)を持っているか、pg_read_all_stats ロールの権限を持っていなければいけません。
|
pg_indexes_size ( regclass )
→ bigint
指定したテーブルに付与されたインデックスで使用されている全ディスクスペースを計算します。
|
pg_relation_size ( relation regclass [, fork text ] )
→ bigint
指定したリレーションの一つの「fork」で使用されているディスクスペースを計算します。
(大抵の目的には、すべてのフォークのサイズを合計する高レベルのpg_total_relation_size あるいはpg_table_size を使う方が便利です。)
引数1つではリレーションの主データフォークのサイズを返します。
2番目の引数で対象となるのがどのフォークであるかを指定できます。
main はリレーションの主データフォークのサイズを返します。
fsm を指定すると、リレーションに関連した空き領域マップ(73.3を参照)のサイズを返します。
vm を指定すると、リレーションに関連した可視性マップ(73.4を参照)のサイズを返します。
init を指定すると、あれば、リレーションに関連した初期化フォークのサイズを返します。
|
pg_size_bytes ( text )
→ bigint
(pg_size_pretty が返す)人間が読めるフォーマットのサイズをバイトに変換します。
有効な値は、bytes 、B 、kB 、MB 、GB 、TB 、PB です。
|
pg_size_pretty ( bigint )
→ text
pg_size_pretty ( numeric )
→ text
バイトサイズを、サイズ単位(バイト、kB、MB、GB、TB、PBのうちの適切なもの)を使った、より人間が読みやすい形式に変換します。
単位は10のべき乗ではなく、2のべき乗であることに注意してください。ですから1kBは1024バイトで、1MBは10242 = 1048576バイト、などとなります。
|
pg_table_size ( regclass )
→ bigint
指定テーブルが使用している、インデックスを含まないディスクスペースを計算します。(ただしあればTOASTテーブル、空き領域マップ、可視性マップを含みます。)
|
pg_tablespace_size ( name )
→ bigint
pg_tablespace_size ( oid )
→ bigint
名前あるいはOIDで指定されたテーブル空間で使用されているディスクスペースを計算します。
現在のデータベースのデフォルトテーブル空間でない限り、この関数を使うには、指定したテーブル空間にCREATE 権限を持っているか、pg_read_all_stats ロールの権限を持っていなければいけません。
|
pg_total_relation_size ( regclass )
→ bigint
指定テーブルが使用している、インデックスとTOASTデータを含む全ディスクスペースを計算します。
結果はpg_table_size + pg_indexes_size と等価です。
|
上記の関数において、テーブルやインデックスをregclass
引数として受け取って処理するものがありますが、この引数は単にpg_class
システムカタログにあるテーブルやインデックスのOIDです。
ただし、regclass
データ型が自動で入力変換を行うため、ユーザが手動で該当するOIDを調べる必要はありません。
詳細は8.19を参照ください。
表 9.97 に示される関数は、データベースオブジェクトに関連する特定のディスクファイルを確認する際の手助けとなります。
表9.97 データベースオブジェクト位置関数
関数
説明
|
---|
pg_relation_filenode ( relation regclass )
→ oid
指定されたリレーションに現在割り当てられている「ファイルノード」番号を返します。
ファイルノードは、リレーションに使用しているファイル名の基本要素です。(詳しくは73.1を参照して下さい。)
ほとんどのリレーションについては、結果はpg_class .relfilenode と同じになります。ただし、いくつかのシステムカタログではrelfilenode がゼロになるため、これらのシステムカタログの正しいファイルノードを取得するには、この関数を使用しなければなりません。
この関数は、ビューの様にストレージに格納されないリレーションが指定された場合はNULLを返します。
|
pg_relation_filepath ( relation regclass )
→ text
リレーションのファイルパス名全体(データベースクラスタのデータディレクトリ、PGDATA からの相対)を返します。
|
pg_filenode_relation ( tablespace oid , filenode oid )
→ regclass
与えられたテーブル空間OIDとファイルノードに格納されているリレーションのOIDを返します。
これは本質的にpg_relation_filepath の逆マッピングです。
データベースのデフォルトテーブル空間内のテーブルに対しては、テーブル空間は0と指定できます。
当たられた値に対応する現在のデータベースにリレーションがなければNULL を返します。
|
表 9.98に照合順序の管理に使用される関数の一覧を示します。
表9.98 照合順序管理関数
関数
説明
|
---|
pg_collation_actual_version ( oid )
→ text
オペレーティングシステムに現在インストールされている照合順序オブジェクトの実際のバージョンを返します。
これがpg_collation .collversion と異なると、その照合順序に依存しているオブジェクトは再構築の必要があるかも知れません。
ALTER COLLATIONも参照してください。
|
pg_database_collation_actual_version ( oid )
→ text
オペレーティングシステムに現在インストールされている照合順序オブジェクトの実際のバージョンを返します。
これがpg_database .datcollversion と異なると、その照合順序に依存しているオブジェクトは再構築の必要があるかも知れません。
ALTER DATABASEも参照してください。
|
pg_import_system_collations ( schema regnamespace )
→ integer
オペレーティングシステム上にあるすべてのロケールに基づき、システムカタログpg_collation に照合順序を追加します。
これはinitdb が使用しているもので、より詳細については24.2.2を参照してください。
その後にオペレーティングシステムに追加のロケールをインストールした場合、この関数を再度実行して、その新しいロケールの照合順序を追加することができます。
pg_collation の既存のエントリにマッチするロケールはスキップされます。
(しかし、オペレーティングシステム上にもはや存在しなくなったロケールに基づく照合順序オブジェクトはこの関数では削除されません。)
schema パラメータは通常はpg_catalog ですが、必ずしもそうでなければならないわけではなく、照合順序をどれか他のスキーマにインストールすることもできます。
この関数は新しく作成された照合順序オブジェクトの数を返します。
この関数の利用はスーパーユーザにのみ限定されています。
|
表 9.99にパーティション化テーブルの構造に関する情報を提供する関数を示します。
表9.99 パーティション情報関数
関数
説明
|
---|
pg_partition_tree ( regclass )
→ setof record
( relid regclass ,
parentrelid regclass ,
isleaf boolean ,
level integer )
1行1パーティションで与えられたパーティション化テーブルあるいはパーティション化インデックスのパーティションツリー内のテーブルあるいはインデックスの情報を表示します。
提供される情報にはパーティションOID、その直接の親のOID、パーティションが葉かどうかを示す真偽値、階層内のレベルを表す整数が含まれます。
レベル値は与えられたテーブルあるいはインデックスがパーティションツリーの根としての役割を持つことを表す0で始まり、1ならその直下のパーティション、2ならそのまた下のパーティションなどとなります。
リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合は行を返しません。
|
pg_partition_ancestors ( regclass )
→ setof regclass
パーティション自身を含む、与えられたパーティションの先祖リレーションを列挙します。
リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合は行を返しません。
|
pg_partition_root ( regclass )
→ regclass
与えられたリレーションが所属するパーティションツリーの最上位の親を返します。
リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合はNULL を返します。
|
たとえばパーティション化テーブルmeasurement
に含まれるデータの全体サイズを確認するには、次の問い合わせが利用できます。
SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
FROM pg_partition_tree('measurement');
表 9.100にインデックスの保守タスクに使用可能な関数を示します。
(これらの保守業務は通常自動バキュームが自動的に行うことに注意してください。これらの関数は特別な場合にのみ必要になります。)
これらの関数はリカバリ中は実行できません。
これらの関数の使用はスーパーユーザと対象のインデックスの所有者に限定されます。
表9.100 インデックス保守関数
関数
説明
|
---|
brin_summarize_new_values ( index regclass )
→ integer
指定されたBRINインデックスを検査してベーステーブル内のインデックスによって現在要約されていないページ範囲を探します。
そのような範囲があれば、テーブルのページをスキャンして新しい要約インデックスタプルを作成します。
インデックスに挿入された新しいページ範囲要約の数を返します。
|
brin_summarize_range ( index regclass , blockNumber bigint )
→ integer
指定のブロックを含むページ範囲が、まだ要約されていなければ、要約します。
これはbrin_summarize_new_values と似ていますが、指定されたテーブルブロック番号のみを対象としてページ範囲を処理するところだけが異なります。
|
brin_desummarize_range ( index regclass , blockNumber bigint )
→ void
指定のブロックを含むページ範囲が要約されていれば、それを含むページ範囲を要約するBRINインデックスタプルを削除します。
|
gin_clean_pending_list ( index regclass )
→ bigint
指定GINインデックスの「処理待ち」リストのエントリをメインのインデックスデータ構造に一括で移動します。
処理待ちリストから削除されたページ数を返します。
fastupdate オプションが無効で作成されたGINインデックスが引数なら、削除は起こらず結果がゼロになります。そのインデックスには処理待ちリストがないからです。
処理待ちリストとfastupdate オプションの詳細については70.4.1と70.5をご覧ください。
|
表 9.101で示されている関数はサーバをホスティングしているマシン上のファイルに対し、ネイティブのアクセスを提供します。
ユーザがpg_read_server_files
ロールを与えられていない限り、データベースクラスタディレクトリとlog_directory
に存在するファイルのみがアクセス可能です。
クラスタディレクトリ内のファイルに対して相対パスを、そしてログファイルに対してはlog_directory
構成設定に一致するパスを使用してください。
ユーザに対してEXECUTE権限をpg_read_file()
あるいは関連する関数に与えることは、サーバの上データベースサーバプロセスが読めるすべてのファイルを読めるようにすることになることに注意してください。これらの関数はデータベース内のすべての権限チェックをすり抜けます。
このことは、たとえばそのようなアクセス権を持つユーザは、認証情報が格納されたpg_authid
テーブルの中身を読むことができますし、同様にデータベース内のすべてのテーブルデータを読むことができるということを意味します。
ですからこれらの関数にアクセス権限を与えるのは慎重に考慮したほうが良いでしょう。
これらの関数に権限を付与する場合、オプションパラメータを示すテーブルエントリは、ほとんどの場合、異なるパラメータリストを持つ複数の物理的な関数として実装されることに注意してください。
使用する場合は、各関数に対して個別に権限を付与する必要があります。
psqlの\df
コマンドは、実際の関数シグネチャが何であるかをチェックするのに役立ちます。
これらの関数の一部はオプションでmissing_ok
パラメータをとり、ファイルまたはディレクトリが存在しない場合の動作を指定できます。
true
の場合、関数はNULL
を返すか、適切な場合には空の結果集合を返します。
false
の場合はエラーが発生します。
デフォルトはfalse
です。
(「ファイルが見つかりません」以外の失敗条件は、どのケースでもエラーとして報告されます。)
デフォルトはfalse
です。
表9.101 汎用ファイルアクセス関数
関数
説明
|
---|
pg_ls_dir ( dirname text [, missing_ok boolean , include_dot_dirs boolean ] )
→ setof text
指定されたディレクトリ内のすべてのファイル(およびディレクトリと他の特殊ファイル)の名前を返します。
include_dot_dirs は「.」と「..」が結果集合に含まれるかどうかを指定します。
デフォルト(false )ではそれらを除外しますが、それらを含めると、missing_ok がtrue の場合は、空のディレクトリと存在しないディレクトリを区別するために役立つでしょう。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_logdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
サーバのログディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールの権限を持つロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_waldir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
先行書き込みログ(WAL)ディレクトリ内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールの権限を持つロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_logicalmapdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
サーバのpg_logical/mappings ディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_logicalsnapdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
サーバのpg_logical/snapshots ディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_replslotdir ( slot_name text )
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
サーバのpg_replslot/slot_name 内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
slot_name は、関数の入力として提供されているレプリケーションスロットの名前です。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_archive_statusdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
WALアーカイブステータスディレクトリ(pg_wal/archive_status )内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_ls_tmpdir ( [ tablespace oid ] )
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
指定されたtablespace 内の一時ファイルディレクトリ内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。
tablespace が与えられなければpg_default テーブル空間が検査されます。
ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。
デフォルトではこの関数の実行はスーパーユーザとpg_monitor ロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_read_file ( filename text [, offset bigint , length bigint ] [, missing_ok boolean ] )
→ text
与えられたoffset から始まり、最大length バイト(先にファイルの終りに到達すればこれより少なくなります)テキストファイルの全部または一部分を返します。
offset が負の場合にはファイルの終りから数えた位置から読み出します。
offset とlength が省略された場合、ファイル全体が返されます。
ファイルから読み込まれたバイトは、そのサーバの符号化方式での文字列として解釈されます。
読み込んだバイト列がその符号化方式において有効でない場合にはエラーが投げられます。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
pg_read_binary_file ( filename text [, offset bigint , length bigint ] [, missing_ok boolean ] )
→ bytea
ファイルの一部あるいは全部を返します。
結果がtext ではなくてbytea 値となり、任意のバイナリデータを読み出すことができることを除き、pg_read_file と同じです。
従って符号化方式の検査は行われません。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
convert_from 関数と組み合わせることで、この関数を、指定した符号化方式でファイルを読み込んでデータベース符号化方式に変換することができます。
SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
|
pg_stat_file ( filename text [, missing_ok boolean ] )
→ record
( size bigint ,
access timestamp with time zone ,
modification timestamp with time zone ,
change timestamp with time zone ,
creation timestamp with time zone ,
isdir boolean )
ファイル容量、最終アクセス時刻、最終更新時刻、最後にファイルステータスを変更した時刻(これはUnixプラットフォームのみ)、ファイル作成時刻(Windowsのみ)および、ディレクトリかどうかを示すフラグを返します。
デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。
|
表 9.102に示す関数は勧告的ロックを管理します。
これらの関数の適切な使用方法についての詳細は、13.3.5を参照してください。
これらの関数はすべて単一の64ビットキー値か2つの32ビットキー値(これらのキー空間は重なり合わないことに注意してください)で識別されるアプリケーション定義のリソースをロックするために使うことを意図しています。
他のセッションがすでに同じリソース識別子とコンフリクトするロックを保持していたら、関数はリソースが利用可能になるまで待つか、その関数にとって適切ならばfalse
を結果として返します。
ロックは共有はあるいは排他のどちらも可能です。共有ロックは同じリソースに対して他の共有ロックとコンフリクトしません。排他ロックとだけコンフリクトします。
ロックはセッションレベル(ロックは解放されるまで保持するかセッションの終了まで保持します)あるいはトランザクションレベル(ロックは現在のトランザクションが終了するまで保持します。手動で解放する方法はありません)で取得できます。
複数のセッションレベルロック要求は積み重ねられます。これにより、同じリソース識別子が3回ロックされると、セッション終了前にそのリソースを解放するアンロック要求が3回発行されなければならなくなります。
表9.102 勧告的ロック用関数
関数
説明
|
---|
pg_advisory_lock ( key bigint )
→ void
pg_advisory_lock ( key1 integer , key2 integer )
→ void
必要なら待ってからセッションレベルの排他勧告的ロックを獲得します。
|
pg_advisory_lock_shared ( key bigint )
→ void
pg_advisory_lock_shared ( key1 integer , key2 integer )
→ void
必要なら待ってからセッションレベルの共有勧告的ロックを獲得します。
|
pg_advisory_unlock ( key bigint )
→ boolean
pg_advisory_unlock ( key1 integer , key2 integer )
→ boolean
事前に獲得したセッションレベルの排他的勧告ロックを解放します。
ロックの解放に成功した場合、true を返します。
ロックを保持していない場合、false を返し、さらに、SQL警告がサーバから報告されます。
|
pg_advisory_unlock_all ()
→ void
現在のセッションで保持するセッションレベルの勧告的ロックをすべて解放します。
(この関数は、クライアントとの接続が不用意に切れた場合でも、セッション終了時に暗黙的に呼び出されます。)
|
pg_advisory_unlock_shared ( key bigint )
→ boolean
pg_advisory_unlock_shared ( key1 integer , key2 integer )
→ boolean
事前に獲得したセッションレベルの共有勧告的ロックを解放します。
ロックの解放に成功した場合、true を返します。
ロックを保持していない場合、false を返し、さらに、SQL警告がサーバから報告されます。
|
pg_advisory_xact_lock ( key bigint )
→ void
pg_advisory_xact_lock ( key1 integer , key2 integer )
→ void
必要なら待ってからトランザクションレベルの排他勧告的ロックを獲得します。
|
pg_advisory_xact_lock_shared ( key bigint )
→ void
pg_advisory_xact_lock_shared ( key1 integer , key2 integer )
→ void
必要なら待ってからトランザクションレベルの共有勧告的ロックを獲得します。
|
pg_try_advisory_lock ( key bigint )
→ boolean
pg_try_advisory_lock ( key1 integer , key2 integer )
→ boolean
可能ならセッションレベルの排他勧告的ロックを獲得します。
これは直ちにロックを取得してtrue を返すか、直ちにロックを取得できない場合は待たずにfalse を返します。
|
pg_try_advisory_lock_shared ( key bigint )
→ boolean
pg_try_advisory_lock_shared ( key1 integer , key2 integer )
→ boolean
可能ならセッションレベルの共有勧告的ロックを獲得します。
これは直ちにロックを取得してtrue を返すか、直ちにロックを取得できない場合は待たずにfalse を返します。
|
pg_try_advisory_xact_lock ( key bigint )
→ boolean
pg_try_advisory_xact_lock ( key1 integer , key2 integer )
→ boolean
可能ならトランザクションレベルの排他勧告的ロックを獲得します。
これは直ちにロックを取得してtrue を返すか、直ちにロックを取得できない場合は待たずにfalse を返します。
|
pg_try_advisory_xact_lock_shared ( key bigint )
→ boolean
pg_try_advisory_xact_lock_shared ( key1 integer , key2 integer )
→ boolean
可能ならトランザクションレベルの共有勧告的ロックを獲得します。
これは直ちにロックを取得してtrue を返すか、直ちにロックを取得できない場合は待たずにfalse を返します。
|