表9-40に、セッションやシステムの情報を抽出する関数を示します。セッションの一時スキーマのOID。PostgreSQLバージョン情報session_userは、通常、現在のデータベース接続を初期化したユーザです。AUTHORIZATIONを使用して変更することができます。current_userは、権限の検査に適用されるユーザ識別子です。ROLEを使用して変更可能です。DEFINER属性を持つ関数の実行中にも変更します。Unix用語で言うと、セッションユーザは"実ユーザ"で、現在のユーザは"実効ユーザ"です。current_user、session_userおよびuserはSQLにおいて特殊な状態を持っており、括弧を付けずに呼び出さなければなりません。current_schema関数は、検索パスの先頭にあるスキーマ名(もしくは、検索パスが空の場合はNULL値)を返します。これは、対象スキーマを指定せずに作成された、任意のテーブルまたは他の名前付きオブジェクトに使用されるスキーマです。検索パスに存在する全てのスキーマ名の配列を返します。booleanオプションにより、pg_catalogのような暗黙的に含まれているシステムスキーマを、検索パスに含めて返すかどうかを指定します。検索パスは、実行時の設定で変更することができます。使用するコマンドは以下の通りです。...]inet_client_addrは現在のクライアントのIPアドレスを返し、inet_client_portはそのポート番号を返します。inet_server_addrは、現在の接続を受け付けたサーバのIPアドレスを返し、inet_server_portはそのポート番号を返します。pg_my_temp_schemaは、現在のセッションの一時スキーマのOIDを返します。(一時テーブルをまったく作成していないために)存在しなければ0を返します。pg_is_other_temp_schemaは、指定したOIDが他のセッションの一時スキーマのOIDであれば、真を返します。(例えば、他のセッションの一時テーブルをカタログ表示から除外したい場合などで有用です。version関数はPostgreSQLサーバのバージョンを記述した文字列を返します。表9-41に列挙した関数を使用して、ユーザはオブジェクトのアクセス権限をプログラムから問い合わせることができます。権限についての詳細は、項5.6を参照してください。現在のユーザはロールに対する権限を持つかhas_database_privilege関数は、あるユーザが特定の方法でデータベースにアクセス可能かどうかを検査します。この関数での引数の使用方法は、has_table_privilegeに類似しています。対象とするアクセス権限の種類は、CREATE、CONNECT、TEMPORARY、またはTEMP(TEMPORARYと同じ)で評価する必要があります。has_function_privilege関数は、あるユーザが特定の方法で関数にアクセス可能かどうかを検査します。この関数での引数の使用方法は、has_table_privilegeに類似しています。データ型(項8.12を参照)と同じ入力が可能です。対象とするアクセス権限の種類は、現在EXECUTEで評価する必要があります。'execute');has_language_privilege関数は、あるユーザが特定の方法で手続き言語にアクセス可能かどうかを検査します。この関数での引数の使用方法は、has_table_privilegeに類似しています。対象とするアクセス権限の種類は、現在USAGEで評価する必要があります。has_schema_privilege関数は、あるユーザが特定の方法でスキーマにアクセス可能かどうかを検査します。この関数での引数の使用方法は、has_table_privilegeに類似しています。対象とするアクセス権限の種類は、CREATEもしくはUSAGEで評価する必要があります。has_table_privilegeはユーザが特定の方法でテーブルにアクセスできるかどうかを検査します。ユーザは名前でもOID(pg_authid.oid)でも指定することができます。この引数が省略された場合はcurrent_userが使用されます。テーブルは名前またはOIDで指定することができます。(従って、has_table_privilegeには、引数の数や型で区別される6つの種類があることになります。名前で指定する場合、必要に応じてスキーマで修飾することができます。求めるアクセス権限はテキスト文字列で指定します。これはSELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGERのいずれかでなければなりません。(しかし大文字小文字は区別されません。'select');has_tablespace_privilege関数は、あるユーザが特定の方法でテーブル空間にアクセス可能かどうかを検査します。この関数での引数の使用方法は、has_table_privilegeに類似しています。対象とするアクセス権限の種類は、CREATEで評価する必要があります。pg_has_roleは、ユーザが特定の方法でロールにアクセスできるかどうかを検査します。取り得る引数についてはhas_table_privilegeと同様です。MEMBER、USAGEで評価する必要があります。ROLEを行う権限)を表します。ROLEをしなkてもすぐに利用できることを表します。OPTIONを付けてください。表9-42に、特定のオブジェクトが、現行スキーマの検索パスにおいて可視かどうかを判別する関数を示します。あるテーブルを含むスキーマが検索パス内に存在し、検索パス内の前方に同じ名前のテーブルがない場合、そのテーブルは可視であると言います。これは、テーブルが明示的なスキーマ修飾なしで名前によって参照可能であるということです。次のようにして、全ての可視テーブルの名前を列挙可能です。クラス、テーブル、型に関する可視性検査を行います。pg_table_is_visibleがビュー、インデックス、シーケンスに対しても使用できること、pg_type_is_visibleがドメインに対しても使用できることに注意してください。関数および演算子では、パスの前方に同じ名前かつ同じ引数のデータ型を持つオブジェクトが存在しなければ、検索パス内のオブジェクトは可視です。演算子クラスでは、名前と関連するインデックスアクセスメソッドが考慮されます。これらの関数は全て、検査するオブジェクトを識別するために、オブジェクトのOIDを必要とします。オブジェクトを名前でテストする場合、OID別名型(regclass、regtype、regprocedure、またはregoperator)を使用すると便利です。pg_type_is_visible('myschema.widget'::regtype);ただし、このように修飾されていない名前をテストしても、あまり意味がないことに注意してください。名前が認識されれば、それは必ず可視ということになります。表9-43に、システムカタログから情報を抽出する関数を列挙します。INDEXコマンドの取得。テーブル空間内にオブジェクトを所有するデータベースのOID集合を取得format_typeは、自身の型OIDとひょっとしたら型修飾子によって特定されるデータ型のSQL名を返します。特定の修飾子が既知でなければ型修飾子にNULLを渡します。pg_get_triggerdef、それぞれ対応する制約、インデックス、ルール、もしくはトリガに対するコマンド作成を再構築します。(これはコマンドのオリジナルテキストではなく、逆コンパイルされた再構築であることに注意してください。)pg_get_exprは、列のデフォルト値のような個々の式の内部形式を逆コンパイルします。システムカタログの内容を試験するときに便利です。ビューを定義するSELECT問い合わせを再構築します。print"(訳注:"見やすく表示")します。printされた書式はより読みやすい半面、デフォルトの書式の方が今後のバージョンのPostgreSQLでも同様に解釈することができそうです。ダンプを目的とする場合は、見やすく表示する出力を使用しないでください。見やすい表示用のパラメータにfalseを渡すことで、このパラメータをまったく持たない種類の結果と同一の結果を生成します。pg_get_serial_sequenceは、列に関連したシーケンスの名前を返します。列に関連したシーケンスが存在しなければ、NULLを返します。最初の入力パラメータはテーブル名です。スキーマを付けることもできます。2番目のパラメータは列名です。最初のパラメータは普通スキーマとテーブルですので、二重引用符付の識別子としては解釈されません。デフォルトで小文字に変換されます。2番目のパラメータは単なる列名であり、二重引用符付として解釈され、その大文字小文字は保持されます。この関数は、シーケンス関数に渡すことができるよう適切な書式で値を返します。BYにより変更、削除することができます。(この関数はおそらくpg_get_owned_sequenceから呼び出されるはずです。bigserial列で実際に入力されたものが反映されます。)pg_get_userbyidはそのOIDで与えられたロールの名前を抽出します。pg_tablespace_databasesによりテーブル空間の使用状況を確認することができます。これは、そのテーブル空間内に格納されたオブジェクトを持つデータベースのOIDの集合を返します。この関数が何らかの行を返した場合、このテーブル空間は空ではなく、そのため、削除することができませんテーブル空間内に格納された特定のオブジェクトを表示するためには、pg_tablespace_databasesで識別されたデータベースに接続し、そのpg_classカタログに問い合わせを行う必要があります。表9-44に示される関数は、COMMENTコマンドによって以前に保存されたコメントを抽出します。指定されたパラメータに一致するコメントが検出されない場合、NULL値が返されます。共有データベースオブジェクトのコメントを取得col_description()関数は、テーブルのOIDとその列番号で指定されるテーブルの列のコメントを返します。obj_description()関数は、テーブル列自体がOIDを所有していませんので、テーブル列に対して使用することはできません。obj_description()関数の2つのパラメータを取る形式はそのOIDと保有しているシステムカタログの名前で指定されたデータベースオブジェクトのコメントを返します。123456を持つテーブルのコメントを抽出します。obj_description()関数の単一パラメータ形式はオブジェクトのOIDのみ必要とします。異なったシステムカタログに渡ってOIDが一意である保証はないことから現在は使われません。間違ったコメントが返ることがあります。shobj_descriptionはobj_descriptionと同じように使用されますが、共有オブジェクトのコメント取得のために使用されます。一部のシステムカタログは、各クラスタ内のデータベース全体に対して大域的です。これらのコメントも同様に大域的に格納されます。