他のバージョンの文書 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.26. システム情報関数と演算子

表 9.63に、セッションおよびシステムの情報を抽出する関数を示します。

本節で列挙されている関数のほかに、同様にシステム情報を提供する統計システムに関連した数多くの関数があります。 27.2.2にさらに情報があります。

表9.63 セッション情報関数

関数

説明

current_catalogname

current_database () → name

現在のデータベースの名前を返します。 (データベースはSQL標準ではカタログと呼ばれています。ですから標準での記述はcurrent_catalogとなります。)

current_query () → text

クライアントから送信された現在実行中問い合わせのテキスト(複数の文を含むことあります)を返します。

current_rolename

current_userと同じです。

current_schemaname

current_schema () → name

サーチパスの先頭にあるスキーマの名前を返します。(サーチパスが空ならNULL値を返します。) これはターゲットスキーマを指定せずに作成されるすべてのテーブルあるいは名前付きのオブジェクトで使われるスキーマです。

current_schemas ( include_implicit boolean ) → name[]

現在有効な検索パス中にあるすべてのスキーマの名前を優先順に配列で返します。 (現在のsearch_path設定にある項目で、存在する検索可能なスキーマに関連しないものは無視されます。) 論理値引数がならpg_catalogのような暗黙的に検索されるシステムスキーマは結果に含まれます。

current_username

現在の実行コンテキストのユーザ名を返します。

inet_client_addr () → inet

現在のクライアントのIPアドレスを返します。UNIXドメインソケット経由の接続ならNULLが返ります。

inet_client_port () → integer

現在のクライアントのIPポート番号を返します。UNIXドメインソケット経由の接続ならNULLが返ります。

inet_server_addr () → inet

サーバが受け付けている現在の接続のIPアドレスを返します。UNIXドメインソケット経由の接続ならNULLが返ります。

inet_server_port () → integer

サーバが受け付けている現在の接続のIPポート番号を返します。UNIXドメインソケット経由の接続ならNULLが返ります。

pg_backend_pid () → integer

現在のセッションに結びついているサーバプロセスのプロセスIDを返します。

pg_blocking_pids ( integer ) → integer[]

指定したサーバプロセスIDによるロック取得をブロックしているプロセスIDを配列で返します。そのようなサーバプロセスが存在しないかあるいはブロックしていない場合は空の配列が返ります。

あるサーバプロセスが別のサーバプロセスをブロックするのは、ブロックされるプロセスのロック要求と競合するロックを保持している場合(ハードブロック)、あるいは、ブロックされるプロセスのロック要求と競合するロックを待っていて、かつロック待ちキュー内でより前方にいる場合(ソフトブロック)です。 パラレルクエリを使っている場合、実際のロックを子ワーカプロセスが保持または待っている場合であっても、この結果には必ずクライアントから可視のプロセスID(つまり、pg_backend_pidの結果)が示されます。 そのような仕様なので、この結果には重複するPIDが含まれることもあります。 また、プリペアドのトランザクションが競合するロックを保持している場合、この関数の結果ではプロセスIDがゼロとして示されることにも注意して下さい。

頻繁にこの関数を呼び出すとデータベースの性能に影響があるかも知れません。ロックマネージャの共有状態への短期的な排他ロックの取得が必要だからです。

pg_conf_load_time () → timestamp with time zone

サーバ設定ファイルが最後に読み込まれた時の時刻を返します。 現在のセッションがそのときに活動中だった場合、これはそのセッション自身が設定ファイルを再読み込みした時刻になります。(ですからその結果はセッションによって少し異なるかもしれません。) それ以外の場合は、postmasterプロセスが設定ファイルを再読み込みした時刻になります。

pg_current_logfile ( [ text ] ) → text

ログ収集機構が現在使用しているログファイルのパス名を返します。 パスにはlog_directoryディレクトリとログファイルの名前が含まれます。 ログ収集が無効ならば戻り値はNULLになります。 複数のログファイルがそれぞれ異なる形式で存在する場合、引数なしのpg_current_logfileは、順序リスト(stderrcsvlog)の最初に出てくる形式のファイルのパスを返します。 これらの形式のログファイルがないときはNULLが返されます。 特定のファイル形式を要求するには、オプションパラメータの値としてcsvlogまたはstderrをオプション引数の値として渡してください。 指定のログ形式がlog_destinationで設定されていない場合は、戻り値がNULLとなります。 結果はcurrent_logfilesファイルの内容を反映します。

pg_my_temp_schema () → oid

現在のセッションの一時スキーマのOIDを返します。(一時テーブルをまだ1つも作成しておらず)存在しなければゼロを返します。

pg_is_other_temp_schema ( oid ) → boolean

指定したOIDが他のセッションの一時スキーマのOIDであれば、真を返します。 (例えば、他のセッションの一時テーブルをカタログ表示から除外したい場合などで有用です。)

pg_jit_available () → boolean

JITコンパイラ拡張が利用可能で(第31章参照)、jit設定パラメータがonなら真を返します。

pg_listening_channels () → setof text

今のセッションにおいて現在待ち受け中の非同期通知チャンネル名の集合を返します。

pg_notification_queue_usage () → double precision

非同期通知キューの最大サイズのうち、処理待ちの通知によって占められている現在の割合(0から1まで)を返します。 詳細はLISTENNOTIFYをご覧ください。

pg_postmaster_start_time () → timestamp with time zone

サーバの起動時刻を返します。

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

指定のサーバプロセスIDによる安全なスナップショットの取得をブロックしているセッションのサーバプロセスIDの配列を返します。そのようなサーバプロセスがないか、ブロックされていない場合は空の配列が返ります。

SERIALIZABLEトランザクションを実行しているセッションは、SERIALIZABLE READ ONLY DEFERRABLEトランザクションが述語ロックの取得をすべて回避しても安全であると決定するまで、後者がスナップショットを取得するのをブロックします。 シリアライザブルトランザクションおよび遅延可能トランザクションについてのさらなる情報については13.2.3を参照してください。

この関数を頻繁に呼び出すと、短時間に述語ロックマネージャの共有状態にアクセスする必要があるため、データベースのパフォーマンスに若干の影響が出るかもしれません。

pg_trigger_depth () → integer

PostgreSQLのトリガの現在の入れ子の深さを返します。(直接的であれ間接的であれ、トリガ内部から呼ばれていなければ0を返します)。

session_username

セッションのユーザ名を返します。

username

current_userと等価です。

version () → text

PostgreSQLサーバのバージョンを説明する文字列を返します。 情報はserver_versionからも得られます。 機械読み取り可能なバージョンはserver_version_numを使ってください。 ソフトウェア開発者は文字列バージョンを解析するのではなく、server_version_num (8.2以降で利用可能)かPQserverVersionを使うべきです。


注記

current_catalogcurrent_rolecurrent_schemacurrent_usersession_userおよびuserSQLにおいて特殊な構文上の地位を持っており、最後に括弧を付けずに呼び出さなければなりません。 PostgreSQLではcurrent_schemaの場合括弧を使用することができますが、他は使えません。

session_userは、通常、現在のデータベース接続を開始したユーザです。しかし、スーパーユーザはこの設定をSET SESSION AUTHORIZATIONを使用して変更することができます。 current_userは、権限の検査に適用されるユーザ識別子です。 通常はセッションユーザと同じですが、SET ROLEを使用して変更可能です。 SECURITY DEFINER属性を持つ関数の実行中にも変わります。 Unix用語で言うと、セッションユーザは実ユーザで、現在のユーザは実効ユーザです。 current_roleusercurrent_userの同義語です。 (標準SQLではcurrent_rolecurrent_userを区別していますが、PostgreSQLではユーザとロールを1種類のエンティティに統合しているため、両者に区別はありません。)

表 9.64に列挙した関数を使用して、ユーザはオブジェクトのアクセス権限をプログラムから問い合わせることができます。 権限についての詳細は、5.7を参照してください。 これらの関数では権限を検査されるユーザは名前かOID(pg_authid.oid)で指定できます。 名前がpublicとして与えられるとPUBLIC仮想ロールの権限が検査されます。 また、user引数を完全に省略できます。この場合はcurrent_userを指定したと見なされます。 検査されるオブジェクトも名前かOIDで指定できます。 名前で指定する時は関連するスキーマ名を含んでも構いません。 対象となるアクセス権限はテキスト文字列で指定します。その文字列はオブジェクト型(たとえばSELECT)へと評価されなければならない適切なアクセスキーワードで指定します。 その権限が許可オプションで保持されるかどうかをテストするためにオプションでWITH GRANT OPTIONを権限型に追加できます。 また、複数の権限型をカンマで区切って列挙できます。この場合はどれかの権限が保持されていれば結果は真となります。 (権限文字列は大文字小文字の区別がなく、追加の空白を権限文字列の間に入れることができますが、権限名の中に入れることはできません。)

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');

表9.64 アクセス権限照会関数

関数

説明

has_any_column_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

ユーザがテーブルのどれか1つの列に対して権限を所有しているか? テーブル全体あるいは列レベルの権限が少なくとも1つの列に与えられていれば成功します。 可能な権限型はSELECTINSERTUPDATEREFERENCESです。

has_column_privilege ( [ user name or oid, ] table text or oid, column text or smallint, privilege text ) → boolean

ユーザがテーブルの指定された(1つの)列に対して権限を所有しているか? テーブル全体あるいはその列に対して列レベルの権限が与えられていれば成功します。 名前かアトリビュート番号(pg_attribute.attnum)で列を指定できます。 可能な権限型はSELECTINSERTUPDATEREFERENCESです。

has_database_privilege ( [ user name or oid, ] database text or oid, privilege text ) → boolean

ユーザはデータベースに対する権限があるか? 可能な権限型はCREATECONNECTTEMPORARYTEMP (TEMPORARYと同じです)です。

has_foreign_data_wrapper_privilege ( [ user name or oid, ] fdw text or oid, privilege text ) → boolean

現在のユーザは外部データラッパに対する権限があるか? 可能な権限型はUSAGEだけです。

has_function_privilege ( [ user name or oid, ] function text or oid, privilege text ) → boolean

ユーザは関数に対する権限があるか? 可能な権限型はEXECUTEだけです。

関数をOIDではなく名前で指定する場合、regprocedureデータ型(8.19を参照)と同じ入力が可能です。 例を示します。

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ user name or oid, ] language text or oid, privilege text ) → boolean

ユーザは言語に対する権限があるか? 可能な権限型はUSAGEだけです。

has_schema_privilege ( [ user name or oid, ] schema text or oid, privilege text ) → boolean

ユーザはスキーマに対する権限があるか? 可能な権限型はCREATEUSAGEです。

has_sequence_privilege ( [ user name or oid, ] sequence text or oid, privilege text ) → boolean

ユーザはシーケンスに対する権限があるか? 可能な権限型はUSAGESELECTUPDATEです。

has_server_privilege ( [ user name or oid, ] server text or oid, privilege text ) → boolean

ユーザは外部サーバに対する権限があるか? 可能な権限型はUSAGEだけです。

has_table_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

ユーザはテーブルに対する権限があるか? 可能な権限型はSELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERです。

has_tablespace_privilege ( [ user name or oid, ] tablespace text or oid, privilege text ) → boolean

ユーザはテーブル空間に対する権限があるか? 可能な権限型はCREATEです。

has_type_privilege ( [ user name or oid, ] type text or oid, privilege text ) → boolean

ユーザにデータ型に対する権限があるか? 可能な権限型はUSAGEだけです。 OIDではなく名前で型を指定する際は、可能な入力はregtypeデータ型に対するのと同じものです(8.19参照)。

pg_has_role ( [ user name or oid, ] role text or oid, privilege text ) → boolean

ユーザにロールに対する権限があるか? 可能な権限型はMEMBERUSAGEです。 MEMBERは直接あるいは間接的にそのロールのメンバであることを示します。(すなわち、SET ROLEを実行する権限です) 一方、USAGEは、そのロールの権限がSET ROLEを実行することなく、直ちに利用可能であることを示します。 この関数はuserpublicに設定する特別なケースを許可しません。 PUBLIC仮想ロールは実在するロールのメンバには決してなれないからです。

row_security_active ( table text or oid ) → boolean

現在のユーザと環境のコンテキストにおいて、指定のテーブルに対して行単位セキュリティは有効か?


アクセス権限のカタログ表現であるaclitem型で利用可能な演算子を表 9.65に示します。 アクセス権限値を解釈する方法に関する情報は5.7をご覧ください。

表9.65 aclitem演算子

演算子

説明

aclitem = aclitemboolean

aclitemは等しいか? (aclitem型には通常の比較演算子の組がありません。等値だけです。 同じようにaclitemの配列は等値比較だけが可能です。)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitemf

aclitem[] @> aclitemboolean

配列は指定した権限を含んでいるか? (これはaclitemを与えられる側と与える側にマッチする配列のエントリを含んでいて、少なくとも指定した権限の集合を持つ場合に真となります。)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitemt

aclitem[] ~ aclitemboolean

これは@>の廃止予定の別名です。

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitemt


表 9.66aclitem型を管理する追加の関数を示します。

表9.66 aclitem関数

関数

説明

acldefault ( type "char", ownerId oid ) → aclitem[]

ownerIdのOIDを持つロールに所属するtype型のオブジェクトのデフォルト権限を持つaclitem配列を作成します。 これはオブジェクトのACL権限がnullであるときに想定されるアクセス権限を示します。 (デフォルトアクセス権限については5.7で述べています。) typeパラメータは以下のどれかでなければなりません。 'c'でCOLUMN、'r'でTABLEおよびテーブルに見えるオブジェクト、's'でSEQUENCE、'd'でDATABASE、'f'でFUNCTIONあるいはPROCEDURE、'l'でLANGUAGE、'L'でLARGE OBJECT、'n'でSCHEMA、't'でTABLESPACE、'F'でFOREIGN DATA WRAPPER、'S'でFOREIGN SERVER、'T'でTYPEあるいはDOMAINを表します。

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

行の集合としてaclitem配列を返します。 アクセス権を与えられる側が仮想ロールPUBLICなら、granteeはゼロで表現されます。 各々の与えられた権限はSELECTINSERTなどで表現されます。 各々の権限は別々の行に分解され、privilege_type列には一つのキーワードだけが現れることに注意してください。

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

与えられた属性でaclitemを作成します。


表 9.67に、特定のオブジェクトが、現行スキーマの検索パスにおいて可視かどうかを判別する関数を示します。 例えば、あるテーブルを含むスキーマが検索パス内に存在し、検索パス内の前方に同じ名前のテーブルがない場合、そのテーブルは可視であると言います。 つまり、これは、テーブルが明示的なスキーマ修飾なしで名前によって参照可能であるということです。 ですから全ての可視テーブルの名前を列挙するには以下のようにします。

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

関数および演算子では、パスの前方に同じ名前かつ同じ引数のデータ型を持つオブジェクトが存在しなければ、検索パス内のオブジェクトは可視と言えます。 演算子クラスと(演算子)族では、名前と関連するインデックスアクセスメソッドが考慮されます。

表9.67 スキーマ可視性照会関数

関数

説明

pg_collation_is_visible ( collation oid ) → boolean

照合順序が検索パスにおいて可視か?

pg_conversion_is_visible ( conversion oid ) → boolean

変換が検索パスにおいて可視か?

pg_function_is_visible ( function oid ) → boolean

関数が検索パスにおいて可視か? (これは手続きと集約にも使えます。)

pg_opclass_is_visible ( opclass oid ) → boolean

演算子クラスが検索パスにおいて可視か?

pg_operator_is_visible ( operator oid ) → boolean

演算子が検索パスにおいて可視か?

pg_opfamily_is_visible ( opclass oid ) → boolean

演算子族が可視か?

pg_statistics_obj_is_visible ( stat oid ) → boolean

統計情報オブジェクトが検索パスにおいて可視か?

pg_table_is_visible ( table oid ) → boolean

テーブルが検索パスにおいて可視か? (これはビュー、マテリアライズドビュー、インデックス、シーケンス、外部テーブルを含むべての形式のリレーションで使用できます。)

pg_ts_config_is_visible ( config oid ) → boolean

テキスト検索設定が検索パスにおいて可視か?

pg_ts_dict_is_visible ( dict oid ) → boolean

テキスト検索辞書が検索パスにおいて可視か?

pg_ts_parser_is_visible ( parser oid ) → boolean

テキスト検索パーサが検索パスにおいて可視か?

pg_ts_template_is_visible ( template oid ) → boolean

テキスト検索テンプレートが検索パスにおいて可視か?

pg_type_is_visible ( type oid ) → boolean

型(またはドメイン)が検索パスにおいて可視か?


これらの関数は全て、検査するオブジェクトを識別するために、オブジェクトのOIDを必要とします。 オブジェクトを名前でテストする場合、OID別名型(regclassregtyperegprocedureregoperatorregconfig、またはregdictionary)を使用すると便利です。 例えば、以下のようにします。

SELECT pg_type_is_visible('myschema.widget'::regtype);

ただし、このようなやり方でスキーマ修飾されていない型名をテストしても、あまり意味がないことに注意してください。名前が認識されれば、それは必ず可視ということになります。

表 9.68に、システムカタログから情報を抽出する関数を列挙します。

表9.68 システムカタログ情報関数

関数

説明

format_type ( type oid, typemod integer ) → text

型OIDと型修飾子で決まるデータ型のSQL名を返します。 型修飾子が不明な場合はNULLを型修飾子に渡してください。

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

制約を作成したコマンドを再構築します。 (これは逆コンパイルで構成したもので、元のコマンドのテキストではありません。)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

列のデフォルト値のような、システムカタログに格納された内部表現式を逆コンパイルします。 式に変数が含まれている場合は2番目の引数として参照されているリレーションのOIDを指定してください。変数が含まれていない場合は、ゼロを渡しておけば十分です。

pg_get_functiondef ( func oid ) → text

関数あるいは手続きの作成コマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) 結果は完全なCREATE OR REPLACE FUNCTIONあるいはCREATE OR REPLACE PROCEDURE文です。

pg_get_function_arguments ( func oid ) → text

CREATE FUNCTION中に現れる形で関数あるいは手続きの引数のリストを再構築します。 (デフォルト値を含みます。)

pg_get_function_identity_arguments ( func oid ) → text

ALTER FUNCTIONのようなコマンド中に現れる形で関数あるいは手続きの引数のリストを再構築します。 この形式ではデフォルト値は省略します。

pg_get_function_result ( func oid ) → text

CREATE FUNCTION中に現れる形で関数のRETURNS句を再構築します。

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

インデックスを作成するコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) columnが渡されていてゼロでないなら、その列の定義だけが再構築されます。

pg_get_keywords () → setof record ( word text, catcode "char", catdesc text )

サーバが認識するSQLキーワードを記述するレコードの集合を返します。 word列にはキーワードが含まれます。 catcode列にはカテゴリーコードが含まれます。Uは非予約キーワード、Cは列名になり得るキーワード、Tは型あるいは関数名になり得るキーワード、Rは完全な予約キーワードです。 catdesc列にはカテゴリーを記述する、ローカライズ化されることもある文字列が含まれます。

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

ルールを作成するコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。)

pg_get_serial_sequence ( table text, column text ) → text

列に関連するシーケンスの名前を返します。 列に関連するシーケンスが存在しなければ、NULLを返します。 列がIDENTITY列の場合、関連するシーケンスはIDENTITY列に対して内部的に作成されたシーケンスとなります。 SERIAL型(serialsmallserialbigserial)の一つを使って作られた列については、そのSERIAL列の定義に対して作られたシーケンスとなります。 後者の場合、この関連付けはALTER SEQUENCE OWNED BYで修正または削除することができます。 (この関数はおそらくpg_get_owned_sequenceと呼ばれるべきだったのでしょうが、現在の名前はそれが主にserial列またはbigserial列と一緒に使われていたという事実によります。) 最初の入力パラメータはテーブル名で、スキーマを付けることもできます。 2番目のパラメータは列名です。 最初のパラメータは普通はスキーマとテーブルですので、二重引用符付の識別子としては解釈されません。 つまり、デフォルトで小文字に変換されます。 一方2番目のパラメータは単なる列名であり、二重引用符付として解釈され、その大文字小文字は保持されます。 この関数は、シーケンス関数(9.17を参照)に渡すことができるよう適切な書式で値を返します。

典型的な使用法はIDENTITY列またはSERIAL列のシーケンスの現在値を読み取ることです。例を示します。

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( statobj oid ) → text

拡張統計情報オブジェクトを作成するコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

トリガを作成するコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。)

pg_get_userbyid ( role oid ) → name

OIDで指定されるロール名を返します。

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。)

pg_get_viewdef ( view oid, wrap_column integer ) → text

ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。 (これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) この関数形式では整形するオプションは常に有効で、列数よりも短く保つように長い行は折り返されます。

pg_get_viewdef ( view text [, pretty boolean ] ) → text

ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。ビューのOIDではなく、テキスト形式の名前を使います。 (これは廃止予定です。OIDのバージョンを使ってください。)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

インデックス列が名前付きのプロパティを持つかどうかを検査します。 共通のインデックス列プロパティは表 9.69に列挙されています。 (拡張アクセスメソッドはインデックスに対して追加のプロパティ名を持てることに注意してください。) プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDあるいは列番号が有効なオブジェクトを特定しない場合はNULLが返ります。

pg_index_has_property ( index regclass, property text ) → boolean

インデックスが名前付きのプロパティを持つかどうかを検査します。 共通のインデックスプロパティは表 9.70に列挙されています。 (拡張アクセスメソッドはインデックスに対して追加のプロパティ名を持てることに注意してください。) プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDが有効なオブジェクトを特定しない場合はNULLが返ります。

pg_indexam_has_property ( am oid, property text ) → boolean

インデックスアクセスメソッドが名前付きのプロパティを持つかどうかを検査します。 アクセスメソッドプロパティは表 9.71に列挙されています。 プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDが有効なオブジェクトを特定しない場合はNULLが返ります。

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

pg_class.reloptionsあるいはpg_attribute.attoptionsの値で表現されるストレージオプションの集合を返します。

pg_tablespace_databases ( tablespace oid ) → setof oid

指定したテーブル空間に格納されるオブジェクトを持つデータベースのOIDの集合を返します。 この関数が何らかの行を返すならば、そのテーブル空間は空ではなく、削除できません。 特定のオブジェクトがそのテーブル空間にあるかどうかを確認するには、pg_tablespace_databasesで識別されるデータベースに接続してpg_classカタログを検索する必要があります。

pg_tablespace_location ( tablespace oid ) → text

テーブル空間が配置されているファイルシステムのパスを返します。

pg_typeof ( "any" ) → regtype

渡された値のデータ型のOIDを返します。 これはトラブル解決作業、または動的にSQL問い合わせを生成するのに便利です。 この関数は、OIDの別名型であるregtypeを返すものとして宣言されます(8.19を参照)。つまり、比較目的のOIDと同一ですが、型名として表示されます。

以下に例をあげます。

SELECT pg_typeof(33);
 pg_typeof
-----------
 integer

SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
 typlen
--------
      4

COLLATION FOR ( "any" ) → text

渡された値の照合順序の名前を返します。 値は必要ならば引用符付きでスキーマ修飾されます。 引数式から照合順序が生じなければ、NULLが返ります。 引数が照合可能なデータ型でなければ、エラーが生じます。

例を挙げます。

SELECT collation for (description) FROM pg_description LIMIT 1;
 pg_collation_for
------------------
 "default"

SELECT collation for ('foo' COLLATE "de_DE");
 pg_collation_for
------------------
 "de_DE"

to_regclass ( text ) → regclass

テキスト形式のリレーション名をOIDに変換します。 同様の結果はその文字列をregclass型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regcollation ( text ) → regcollation

テキスト形式の照合順名をOIDに変換します。 同様の結果はその文字列をregcollation型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regnamespace ( text ) → regnamespace

テキスト形式のスキーマ名をOIDに変換します。 同様の結果はその文字列をregnamespace型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regoper ( text ) → regoper

テキスト形式の演算子名をOIDに変換します。 同様の結果はその文字列をregoper型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regoperator ( text ) → regoperator

テキスト形式の演算子名(パラメータ型付き)をOIDに変換します。 同様の結果はその文字列をregoperator型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regproc ( text ) → regproc

テキスト形式の関数名または手続き名をOIDに変換します。 同様の結果はその文字列をregproc型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regprocedure ( text ) → regprocedure

テキスト形式の関数名または手続き名(引数型付き)をOIDに変換します。 同様の結果はその文字列をregprocedure型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regrole ( text ) → regrole

テキスト形式のロール名をOIDに変換します。 同様の結果はその文字列をregrole型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。

to_regtype ( text ) → regtype

テキスト形式の型名をOIDに変換します。 同様の結果はその文字列をregtype型にキャストすることによっても得られます。(8.19参照。) しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 またキャストと違って数値のOIDを入力として受け付けません。


データベースオブジェクトを再構築(逆コンパイル)する関数の多くにオプションのprettyフラグがあり、trueなら結果が整形されるようになっています。 整形によって不必要な括弧が抑止され、見やすさのために空白は追加されます。 整形形式は見やすいですが、デフォルト形式は将来のバージョンのPostgreSQLでも同じように解釈される可能性が高いです。 ですから、整形された出力をダンプ目的で使わないでください。 pretty引数にfalseを渡すとパラメータを省略したとの同じ結果が得られます。

表9.69 インデックス列の属性

名前説明
asc前方スキャンで列は昇順にソートされるか
desc前方スキャンで列は降順にソートされるか
nulls_first前方スキャンで列はNULLを先頭にしてソートするか
nulls_last前方スキャンで列はNULLを最後にしてソートするか
orderable列は定義済みのソート順を所有しているか
distance_orderable列は距離の演算子の順序に従ってスキャンできるか、例えばORDER BY col <-> 定数など
returnable列の値をインデックスオンリースキャンで返すことができるか
search_array列はcol = ANY(array)の検索をネイティブにサポートしているか
search_nulls列はIS NULLおよびIS NOT NULLの検索をサポートしているか

表9.70 インデックスの属性

名前説明
clusterableインデックスをCLUSTERコマンドで使うことができるか
index_scanインデックスは通常の(ビットマップでない)スキャンをサポートしているか
bitmap_scanインデックスはビットマップスキャンをサポートしているか
backward_scanスキャンの途中でスキャン方向を変更できるか(マテリアライゼーションを必要とせずにカーソルの FETCH BACKWARDをサポートするため)

表9.71 インデックスアクセスメソッドの属性

名前説明
can_orderアクセスメソッドはCREATE INDEXにおいてASCDESCおよび関連するキーワードをサポートしているか
can_uniqueアクセスメソッドは一意インデックスをサポートしているか
can_multi_colアクセスメソッドは複数列にまたがるインデックスをサポートしているか
can_excludeアクセスメソッドは排他制約をサポートしているか
can_includeアクセスメソッドがCREATE INDEXINCLUDE句をサポートしているか

表 9.72にデータベースオブジェクトの識別とアドレスに関連する関数を示します。

表9.72 オブジェクト情報とアドレスの関数

関数

説明

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

カタログOID、オブジェクトOID、もしくはサブオブジェクトOID(たとえばテーブル中の列番号。オブジェクト全体を参照している場合は0)で指定されたデータベースオブジェクトのテキストによる説明を返します。 この説明はサーバの設定に依存しますが、人が読んでわかる、そして翻訳も可能になることを目的としたのもです。 これはpg_dependカタログに格納されたオブジェクトの識別判断の際に有用です。

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

カタログOID、オブジェクトOID、そしてサブオブジェクトIDにより指定されるデータベースオブジェクトを一意に特定するために十分な情報を含む行を返します。 この情報は機械による読み取りを目的としており、決して翻訳されません。 typeはデータベースオブジェクトの型を識別するものです。 schemaはオブジェクトが所属するスキーマの名前ですが、スキーマに所属しないオブジェクト型の場合はNULLになります。 nameは(必要なら引用符で括った)オブジェクトの名前ですが、(適切ならスキーマ名と合わせて)オブジェクトの一意識別子として使用できる場合にのみ指定し、それ以外の場合はNULLにします。 identityは完全なオブジェクトの識別で、オブジェクトの型に依存した正確なフォーマットを持っています。 フォーマット内の各部分はスキーマ修飾されており、必要に応じて引用符で括られます。

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

カタログOID、オブジェクトOID、そしてサブオブジェクトIDにより指定されるデータベースオブジェクトを一意に特定するために充分な情報を含む行を返します。 返される情報は現在のサーバに依存しません。 つまり、他のサーバで全く同じ名前を付けられたオブジェクトを識別するために使うことができます。 typeはデータベースオブジェクトの型を識別するものです。 object_namesobject_argsは文字列の配列で、それらが組み合わされてオブジェクトへの参照を構成します。 これらの3つの値は、オブジェクトの内部アドレスを取得するためにpg_get_object_addressに渡すことができます。

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

型、オブジェクト名および引数の配列で指定されたデータベースオブジェクトを一意に特定するために十分な情報を含む行を返します。 返される値は、pg_dependなどのシステムカタログで使用されるもので、pg_identify_objectpg_describe_objectなど他のシステム関数に渡すことができます。 classidはオブジェクトを含むシステムカタログのOIDです。 objidはオブジェクト自体のOIDです。 objsubidはオブジェクトのサブID、なければ0です。 この関数はpg_identify_object_as_addressの逆関数です。


表 9.73に示される関数は、COMMENTコマンドによって以前に保存されたコメントを抽出します。 指定されたパラメータに対するコメントが存在しない場合、NULL値が返されます。

表9.73 Comment Information Functions

関数

説明

col_description ( table oid, column integer ) → text

テーブルのOIDと列番号で指定されたテーブル列のコメントを返します。 (obj_descriptionはテーブル列には使えません。列は自身のOIDを持たないからです。)

obj_description ( object oid, catalog name ) → text

OIDとそれを含むシステム型で指定されるデータベースオブジェクトのコメントを返します。 たとえばobj_description(123456, 'pg_class')はOID 123456のテーブルのコメントを返します。

obj_description ( object oid ) → text

OIDだけで指定されるデータベースオブジェクトのコメントを返します。 これは廃止予定です。異なるシステムカタログに渡ってOIDが一意であるという保証はないからです。ですから、間違ったコメントが返されるかも知れません。

shobj_description ( object oid, catalog name ) → text

OIDとそれを含むシステム型で指定されるデータベース共有オブジェクトのコメントを返します。 これは共有オブジェクト(すなわちデータベース、ロール、テーブル空間)のコメントを取り出すために使うのを除くとobj_descriptionと同じです。 システムカタログによってはクラスタ内ですべてのデータベースに対して広域的で、その中のオブジェクトの説明も広域的に格納されています。


表 9.74で示される関数はサーバトランザクション情報をエクスポートできる形式で提供します。 これら関数の主な使用目的は2つのスナップショット間でどのトランザクションがコミットされたのかを特定するためです。

表9.74 トランザクションIDとスナップショット情報関数

関数

説明

pg_current_xact_id () → xid8

現在のトランザクションIDを返します。 現在のトランザクションに(データベース更新をまったく行わなかったために)IDがなければ新規に割り当てます。

pg_current_xact_id_if_assigned () → xid8

現在のトランザクションIDを返します。もしまだ割り当てられていなければNULLを返します。 (トランザクションが読み取り専用なら、無駄なXIDの消費を避けるためにこの関数を使うのが最良です。)

pg_xact_status ( xid8 ) → text

最近のトランザクションのコミット状態について報告します。 トランザクションが最近のもので、システムがそのトランザクションのコミット状態を保持している場合は、トランザクションの状態はin progresscommittedあるいはabortedとして報告されます。 トランザクションが古く、その参照がシステムに残っておらず、コミット状態の情報が破棄されている場合は、この関数はNULLを返します。 COMMITの進行中にアプリケーションとデータベースが切断されたときに、アプリケーションはトランザクションがコミットされたか中断されたかを知るためにこれを使うことができます。 プリペアドのトランザクションはin progressとして報告されること、そして指定のIDがプリペアドのトランザクションかどうかを確認する必要がある場合は、アプリケーションはpg_prepared_xactsを調べなければならないことに注意してください。

pg_current_snapshot () → pg_snapshot

どのトランザクションIDがin-progressなのかを表示するデータ構造である現在のsnapshotを返します。

pg_snapshot_xip ( pg_snapshot ) → setof xid8

スナップショットに含まれるin-progressのトランザクションIDの集合を返します。

pg_snapshot_xmax ( pg_snapshot ) → xid8

スナップショットのxmaxを返します。

pg_snapshot_xmin ( pg_snapshot ) → xid8

スナップショットのxminを返します。

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

このスナップショットによると与えられたトランザクションIDが可視か(すなわちスナップショットが取得される前に完了していたか)? この関数は副トランザクションIDに対しては正しい答えを返さないことに注意してください。


内部トランザクションID型(xid)は32ビット幅なので40億トランザクション毎にラップします。 とは言っても、表 9.74に示される関数はインストレーションの生涯にわたってラップしないxid8型の64ビット形式を使用しており、必要に応じてxidにキャストして変換できます。 これらの関数で使用されるデータ型、pg_snapshotはある特定の時間におけるトランザクションIDの可視性に関する情報を格納します。 構成要素は表 9.75に記載されています。 pg_snapshotのテキスト表現はxmin:xmax:xip_listです。 たとえば10:20:10,14,15xmin=10, xmax=20, xip_list=10, 14, 15であることを意味します。

表9.75 スナップショット構成要素

名前説明
xmin 現在実行中で最も小さいトランザクションID。 xminより小さい全てのトランザクションはコミットされて可視となっているか、またはロールバックされて消滅しています。
xmax 完了した最も大きなトランザクションIDの一つ大きなID。 xmaxと等しいかより大きい全てのトランザクションIDはスナップショットの時点で未完了であり、従って不可視です。
xip_list スナップショット時の実行中のトランザクションです。 xmin <= X <xmaxで、このリストにないトランザクションIDはスナップショット時点ですでに完了しており、コミット状態によって可視あるいはデッドのどちらかです。 リストには副トランザクションのトランザクションIDは含まれません。

PostgreSQLリリースの13より前ではxid8型がなく、これらの関数の変種は、64ビットのXIDを表現するためにbigintを、スナップショットデータ型に対応する別のtxid_snapshot型を使っていました。 これらの古い関数ではtxidが名前に含まれています。 過去互換性のためにこれらはまだサポートされていますが、将来のリリースでは削除されるかも知れません。 表 9.76を参照してください。

表9.76 廃止予定のトランザクションIDとスナップショット情報関数

関数

説明

txid_current () → bigint

pg_current_xact_id()参照。

txid_current_if_assigned () → bigint

pg_current_xact_id_if_assigned()参照。

txid_current_snapshot () → txid_snapshot

pg_current_snapshot()参照。

txid_snapshot_xip ( txid_snapshot ) → setof bigint

pg_snapshot_xip()参照。

txid_snapshot_xmax ( txid_snapshot ) → bigint

pg_snapshot_xmax()参照。

txid_snapshot_xmin ( txid_snapshot ) → bigint

pg_snapshot_xmin()参照。

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

pg_visible_in_snapshot()参照。

txid_status ( bigint ) → text

pg_xact_status()参照。


表 9.77に示す関数はいつ過去のトランザクションがコミットされたかの情報を提供します。 track_commit_timestamp設定オプションが有効のときにだけ、かつそれが有効になった後にコミットされたトランザクションについてのみ意味のある情報を提供します。

表9.77 コミットされたトランザクションに関する情報関数

関数

説明

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

トランザクションのコミットタイムスタンプを返します。

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone )

直近にコミットしたトランザクションのトランザクションIDとコミットタイムスタンプを返します。


表 9.78に示す関数は、カタログのバージョンなどといったinitdbの実行時に初期化される情報を表示します。 それらはまた、先行書き込みログとチェックポイント処理についての情報も示します。 この情報はクラスタ全体に渡るもので、どれか1つのデータベースに特有のものではありません。 これらの関数はpg_controldataアプリケーションと同じ情報源から、ほぼ同じ情報を提供します。

表9.78 制御データ関数

関数

説明

pg_control_checkpoint () → record

表 9.79に示すように現在のチェックポイントの状態に関する情報を返します。

pg_control_system () → record

表 9.80に示すように現在の制御ファイルの状態に関する情報を返します。

pg_control_init () → record

表 9.81に示すようにクラスタの初期化状態に関する情報を返します。

pg_control_recovery () → record

表 9.82に示すようにリカバリ状態に関する情報を返します。


表9.79 pg_control_checkpointの出力列

列名データ型
checkpoint_lsnpg_lsn
redo_lsnpg_lsn
redo_wal_filetext
timeline_idinteger
prev_timeline_idinteger
full_page_writesboolean
next_xidtext
next_oidoid
next_multixact_idxid
next_multi_offsetxid
oldest_xidxid
oldest_xid_dbidoid
oldest_active_xidxid
oldest_multi_xidxid
oldest_multi_dbidoid
oldest_commit_ts_xidxid
newest_commit_ts_xidxid
checkpoint_timetimestamp with time zone

表9.80 pg_control_systemの出力列

列名データ型
pg_control_versioninteger
catalog_version_nointeger
system_identifierbigint
pg_control_last_modifiedtimestamp with time zone

表9.81 pg_control_init Output Columns

列名データ型
max_data_alignmentinteger
database_block_sizeinteger
blocks_per_segmentinteger
wal_block_sizeinteger
bytes_per_wal_segmentinteger
max_identifier_lengthinteger
max_index_columnsinteger
max_toast_chunk_sizeinteger
large_object_chunk_sizeinteger
float8_pass_by_valueboolean
data_page_checksum_versioninteger

表9.82 pg_control_recoveryの出力列

列名データ型
min_recovery_end_lsnpg_lsn
min_recovery_end_timelineinteger
backup_start_lsnpg_lsn
backup_end_lsnpg_lsn
end_of_backup_record_requiredboolean