このトピックでは、オブジェクト識別子型の定義と構文について説明します。
オブジェクト識別子 (OID) は、さまざまなシステムテーブルのPostgreSQLasプライマリキーによって内部的に使用されます。 タイプoidはオブジェクト識別子を表す。 また、oidにはいくつかのエイリアス型があり、それぞれregという名前です。
oid型は現在、符号なし4バイト整数として実装されています。 したがって、大規模なデータベースで、または大規模な個々のテーブルでさえ、データベース全体の一意性を提供するのに十分な大きさではありません。
oidタイプ自体には、比較できない操作がほとんどありません。 ただし、整数にキャストしてから、標準の整数演算子を使用して操作できます。 (これを行うと、署名と未署名の混乱の可能性に注意してください。)
OIDエイリアスタイプには、特殊な入出力ルーチンを除いて、独自の操作はありません。 これらのルーチンは、型oidが使用する生の数値ではなく、システムオブジェクトのシンボリック名を受け入れて表示できます。 別名型は、オブジェクトのOID値の単純化されたルックアップを可能にする。 たとえば、テーブルmytableに関連するpg_attribute行を調べるには、次のように記述します。
SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass;よりもむしろ:
SELECT * FROM pg_attribute
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'mytable'); それ自体はそれほど悪くは見えませんが、それでも単純化されすぎています。 異なるスキーマにmytableという名前の複数のテーブルがある場合、正しいOIDを選択するには、はるかに複雑なサブ選択が必要になります。 regclass入力コンバーターは、スキーマパス設定に従ってテーブル検索を処理するため、「正しいこと」を自動的に実行します。 同様に、テーブルのOIDをregclassにキャストすると、数値のOIDをシンボリックに表示するのに便利です。
オブジェクト識別子タイプ
名前 | 関連ドキュメント | 説明 | 値の例 |
| 任意 | 数値オブジェクト識別子 |
|
|
| リレーション名 |
|
|
| 照合順序名 |
|
|
| テキスト検索設定 |
|
|
| テキスト検索辞书 |
|
|
| 名前空間名 |
|
|
| 演算子名 |
|
|
| 演算子と引数型 |
|
|
| 関数名 |
|
|
| 引数型を持つ関数 |
|
|
| ロール名 |
|
|
| データ型名 |
|
名前空間によってグループ化されたオブジェクトのすべてのOIDエイリアス型は、スキーマ修飾名を受け入れ、オブジェクトが修飾されずに現在の検索パスに見つからない場合、出力にスキーマ修飾名を表示します。 たとえば、myschema.mytableはregclassに入力できます (そのようなテーブルがある場合) 。 その値は、現在の検索パスに応じて、myschema.mytableまたはmytableとして出力される場合があります。 regprocおよびregoperエイリアス型は、一意の (オーバーロードされていない) 入力名のみを受け入れるため、使用が制限されます。ほとんどの場合、regprocedureまたはregoperatorが適しています。 regoperatorの場合、unary演算子は、未使用のオペランドにNONEを書き込むことによって識別されます。
ほとんどのOIDエイリアス型の追加のプロパティは、依存関係の作成です。 これらの型のいずれかの定数が格納された式 (列の既定の式やビューなど) に表示される場合、参照されるオブジェクトに対する依存関係が作成されます。 たとえば、列にデフォルトの式nextval('my_seq'::regclass) がある場合、PostgreSQLはデフォルトの式がシーケンスmy_seqに依存することを理解しているため、システムは最初にデフォルトの式を削除せずにシーケンスを削除することはできません。 regroleはこのプロパティの例外です。 この型の定数は、ストアド式では使用できません。
OIDエイリアスタイプは、トランザクション分離ルールに完全に従っていません。 プランナーはまた、それらを単純な定数として扱い、最適ではない計画につながる可能性があります。
システムによって使用される別の識別子タイプは、xid、またはトランザクション (略してxact) 識別子である。 これは、システム列xminおよびxmaxのデータ型です。 トランザクション識別子は32ビット量である。 コンテキストによっては、64ビットのバリアントxid8が使用されます。 xid値とは異なり、xid8値は厳密に単調に増加し、データベースクラスターの有効期間中に再利用することはできません。
システムによって使用される第3の識別子タイプは、cidまたはコマンド識別子である。 これは、システム列cminおよびcmaxのデータ型です。 コマンド識別子も32ビット量である。
システムによって使用される最終識別子タイプは、tidまたはタプル識別子 (行識別子) である。 システム列ctidのデータ型です。 タプルIDは、そのテーブル内の行の物理的位置を識別する対 (ブロック番号、ブロック内のタプルインデックス) である。