web-dev-qa-db-ja.com

Postgresの「ctid」システム列のデータ型は何ですか?

Postgresシステムカラムは で説明されています。第5章データ定義> 5.4。システムカラム

そのページでは、oidの値は「32ビット量」であると述べています。そして、そのページはトランザクション識別子について同じことを言っています。つまり、oidtableoidxmincminxmaxcmaxはすべて32ビット整数。

ただし、ctidシステム列は残ります。

テーブル内の行バージョンの物理的な場所。 ctidを使用して行バージョンをすばやく見つけることができますが、行のctidは、VACUUM FULLによって更新または移動されると変更されることに注意してください。したがって、ctidは長期的な行識別子としては役に立ちません。論理行を識別するには、OID、またはさらに優れたユーザー定義のシリアル番号を使用する必要があります。

ctid列のデータ型は何ですか?

特に私はPostgres 10.3のバージョンに興味がありますが、それが過去のバージョンから変更されている場合は、知っておくと役に立ちます。

6
Basil Bourque

tid

マニュアルページ 第8章データ型> 8.18を参照してください。オブジェクト識別子タイプ 。データ型はPostgres固有であり、tidとして知られていることを説明しています。

システムで使用される最後の識別子タイプは、tid、またはタプル識別子(行識別子)です。これは、システム列ctidのデータ型です。タプルIDは、テーブル内の行の物理的な場所を識別するペア(ブロック番号、ブロック内のタプルインデックス)です。

ctidをページ番号と行番号に分解するにはどうすればよいですか?

ちなみに、ctidtidのこのトピックに興味がある場合は、Postgres 12の2つの新機能に興味がある可能性があります。(a) OID通常の列に降格されます 、および(b)プラグ可能なテーブルストレージ/アクセス方法の機能は、Postgres 12以降で新しく追加されました。 thisthisthisを参照this 、および this

7
Basil Bourque