他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

Chapter 2. ラージオブジェクト

Table of Contents
2.1. 序文
2.2. 実装機能
2.3. インタフェース
2.3.1. ラージオブジェクトの作成
2.3.2. ラージオブジェクトのインポート
2.3.3. ラージオブジェクトのエクスポート
2.3.4. 既存のラージオブジェクトのオープン
2.3.5. ラージオブジェクトへのデータの書き込み
2.3.6. ラージオブジェクトからのデータの読み込み
2.3.7. ラージオブジェクトのシーク
2.3.8. ラージオブジェクト記述子を閉じる
2.3.9. ラージオブジェクトの削除
2.4. サーバ側の組み込み関数
2.5. Libpqからラージオブジェクトへのアクセス

2.1. 序文

7.1 より前の PostgreSQL では、データベース内の行のサイズはデータページのサイズを越えることはできませんでした。データページのサイズは 8192バイト(これがデフォルトです。 32768まで増やすことができます。) ですので、データ値の上限は相対的に見て小さなものでした。この値よりも大きなデータ格納をサポートするために、PostgreSQL はラージオブジェクトインタフェースを提供しました。 現在も提供しています。このインタフェースは、ラージオブジェクトと宣言されたユーザデータに対して、ファイル指向のアクセスを提供します。

PostgreSQL の間接的な派生元である POSTGRES 4.2 はラージオブジェクトに関して3つの標準実装、POSTGRES サーバ外部のファイル、POSTGRES で管理される外部ファイル、POSTGRES 内に格納されるデータ、をサポートしていました。これはかなりユーザーの混乱を招きました。その結果、データベース内に格納されるデータとしてのラージオブジェクトのみをPostgreSQLではサポートしました。これによってアクセスが少々遅くなりましたが、より厳密に一貫性を持ったデータを提供するようになりました。 歴史的な理由により、この格納の仕組みは転置ラージオブジェクトと呼ばれています (この節では、「転置」と「ラージオブジェクト」の両方を使用していますが、どちらも同じ意味です)。PostgreSQL 7.1からは、すべてのラージオブジェクトはpg_largeobjectと呼ばれる、1つのシステムテーブルに格納されます。

PostgreSQL 7.1 では、個々のデータページよりもかなり大きなデータ行を持つことができる("TOAST" というニックネームの)機構を導入しました。これによりラージオブジェクトインタフェースの一部は旧式のものになりました。ラージオブジェクトインタフェースに残る利点の1つは、データへのランダムアクセスが可能であるという点です。 つまり、巨大な値の中の小さなチャンクを読み書きできる能力です。今後 TOASTにも同様の機能を組み込む予定です。

この節では、PostgreSQL のラージオブジェクトへの問い合わせ言語インタフェースの実装とプログラミングについて説明します。この節の例では libpq C ライブラリをし用意します。 しかし、PostgreSQL に組み込み済みのプログラミングインタフェースのほとんどは同等の機能をサポートしています。他のインタフェースでは、巨大な値を汎用的にサポートするために、内部的にラージオブジェクトインタフェースを使用しているものもあります。これはこの節では説明しません。