オブジェクト識別子データ型オブジェクト識別子(OID)はPostgreSQLの内部で様々なシステムテーブルのプライマリキーとして使用されます。OIDSが指定されていない場合やdefault_with_oids設定変数が偽に設定されている場合を除き、OIDシステム列がユーザ作成のテーブルに追加されます。oidデータ型はオブジェクト識別子を表します。oidには別名もいくつかあります。regproc、regprocedure、regoper、regoperator、regclass、およびregtypeです。表8-19に概要を示します。oidデータ型は現在、符号無し4バイト整数として実装されています。これは、大規模なデータベースの全体にわたって一意とするには十分ではありません。大規模な個別のテーブル内においても十分ではないかもしれません。そのため、ユーザ作成テーブルのOID列をプライマリキーとして使用するのはお勧めできません。OIDの使用は、システムテーブルへの参照の場合にのみ推奨されます。8.0.4では、OIDはデフォルトでユーザが作成したテーブルに含まれています。この振舞いは将来のバージョンのPostgreSQLでは変更されるかもしれません。OIDSが指定されない場合やdefault_with_oids設定変数が真に設定されていない場合に、ユーザ作成のテーブルにはOIDが含まれないことになります。oidデータ型自体は、比較以外の演算はほとんど行いません。整数としてキャストすることもでき、その場合標準の整数演算子を使用して操作することができます。(これを行うと、符号付きと符号無しの間で混乱が起きかねないことに注意してください。)OIDの別名データ型は、専用の入出力ルーチン以外には演算を行いません。これらのルーチンでは、oid型が使用するような未加工の数値ではなく、システムオブジェクト用のシンボル名を受け入れたり表示したりできます。別名データ型により、オブジェクトのOID値の検索が簡単になります。mytableテーブルに関連したpg_attribute行を確認するには、以下のように記述することができます。'mytable'::regclass;次のように記述する必要はありません。'mytable');後者もそう悪くないように見えますが、過度に単純化されています。異なるスキーマにmytableテーブルが複数ある場合には、正しいOIDを選択するために、より複雑なSELECTが必要となります。regclass入力変換ではスキーマパスの設定に従ってテーブル検索を扱いますので、自動的に"正しい検索"を行います。同様に、テーブルのOIDをregclassにキャストすることは、数値のOIDのシンボル表示に便利です。integer全てのOID別名型はスキーマ修飾名を受け入れ、出力時にスキーマ修飾名を表示します。現在の検索パスでオブジェクトが見付けられなければ、修飾せずに出力します。regprocとregoper別名型は、一意な(オーバーロードしていない)名前のみを入力として受け入れるため、これらの使用には限度があります。ほとんどの場合、regprocedureまたはregoperatorを使用するのが適切です。regoperatorの場合、単項演算子は未使用のオペランドをNONEと記述することによって指定されます。これはxminシステム列およびxmaxシステム列のデータ型です。システムが使用する3つ目の識別子はcid、すなわちコマンド識別子です。これはcminシステム列およびcmaxシステム列のデータ型です。システムが使用する最後の識別子はtid、すなわちタプル識別子(行識別子)です。これはctidシステム列のデータ型です。タプルIDはテーブル内の行の物理的位置を識別するための組(ブロック番号、ブロック内のタプルインデックス)です。(システム列の詳細は項5.4で説明します。