すべてのプロダクト
Search
ドキュメントセンター

PolarDB:オブジェクト識別子タイプ

最終更新日:May 31, 2024

このトピックでは、オブジェクト識別子型の定義と構文について説明します。

オブジェクト識別子 (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

任意

数値オブジェクト識別子

564182

regclass

pg_class

リレーション名

pg_type

regcollation

pg_collation

照合順序名

"POSIX"

regconfig

pg_ts_config

テキスト検索設定

英語

regdictionary

pg_ts_dict

テキスト検索辞书

シンプル

regnamespace

pg_名前空間

名前空間名

pg_カタログ

レゴパー

pg_operator

演算子名

+

regoperator

pg_operator

演算子と引数型

*(integer, integer) または -(NONE, integer)

regproc

pg_proc

関数名

合計

regprocedure

pg_proc

引数型を持つ関数

合計 (int4)

regrole

pg_authid

ロール名

スミス

regtype

pg_type

データ型名

整数

名前空間によってグループ化されたオブジェクトのすべてのOIDエイリアス型は、スキーマ修飾名を受け入れ、オブジェクトが修飾されずに現在の検索パスに見つからない場合、出力にスキーマ修飾名を表示します。 たとえば、myschema.mytableregclassに入力できます (そのようなテーブルがある場合) 。 その値は、現在の検索パスに応じて、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は、そのテーブル内の行の物理的位置を識別する対 (ブロック番号、ブロック内のタプルインデックス) である。