1. ホーム
  2. sql

[解決済み] SQL、PostgresのOID、それは何ですか、そしてなぜ彼らは便利ですか?

2022-04-21 17:27:51

質問

PostgreSQLのテーブル作成について調べていて、こんなことに遭遇しました。

CREATE TABLE (
...
) WITH ( OIDS = FALSE );

私はpostgresが提供するドキュメントを読み、OOPからオブジェクト識別子の概念を知っていますが、まだ把握できていません。

  • なぜそのような識別子がデータベースで有用なのでしょうか?
  • クエリーを短くするため?
  • どのような場合に使用するのでしょうか?

どのように解決するのですか?

OIDは基本的に、すべての行に組み込みのIDを与え、(ユーザースペースのカラムではなく)システムのカラムに含まれます。 これは、主キーがないテーブルや、重複した行がある場合などに便利です。 例えば、同じ行が2つあるテーブルで、最も古い行を削除したい場合、oidカラムを使用して削除することができます。

OIDは、4バイトの符号なし整数で実装されています。これらは ではない 一意なOIDカウンターは2³²-1で折り返されます。OID は、データ型を識別するためにも使われます ( /usr/include/postgresql/server/catalog/pg_type_d.h ).

私の経験では、この機能はほとんどのpostgresでバックされたアプリケーションでは一般的に使われておらず(おそらく非標準であることも理由の一つでしょう)、また その使用は基本的に非推奨 :

PostgreSQL 8.1ではdefault_with_oidsは はデフォルトでオフになっています。 PostgreSQLでは、デフォルトでオンになっています。

ユーザーテーブルでOIDを使用することは 非推奨とされているため、ほとんどの のインストールは、この を無効にします。アプリケーションで 特定のテーブルでOIDを必要とする は、作成時にWITH OIDSを指定する必要があります。 テーブルを作成します。この変数は との互換性を保つために有効です。 アプリケーションは、この の動作になります。