他のバージョンの文書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

第 29章ラージオブジェクト

目次
29.1. 歴史
29.2. 実装機能
29.3. クライアントインタフェース
29.3.1. ラージオブジェクトの作成
29.3.2. ラージオブジェクトのインポート
29.3.3. ラージオブジェクトのエクスポート
29.3.4. 既存のラージオブジェクトのオープン
29.3.5. ラージオブジェクトへのデータの書き込み
29.3.6. ラージオブジェクトからのデータの読み込み
29.3.7. ラージオブジェクトのシーク
29.3.8. ラージオブジェクトのシーク位置の入手
29.3.9. ラージオブジェクト記述子を閉じる
29.3.10. ラージオブジェクトの削除
29.4. サーバ側の関数
29.5. サンプルプログラム

PostgreSQLにはラージオブジェクト機能があります。 これは、特殊なラージオブジェクト構造に格納されたユーザデータに対してストリーム様式のアクセスを提供します。 全体をまるごと簡単に操作するには巨大過ぎるデータ値を操作する場合、ストリーミングアクセスが有用です。

本章では、PostgreSQLラージオブジェクトデータに関する、実装、プログラミング、問い合わせ言語インタフェースについて説明します。 libpq Cライブラリを例として本章で使用していますが、ほとんどのPostgreSQL固有のプログラミングインタフェースは同等の機能を持っています。 他のインタフェースでは、巨大な値を汎用的にサポートできるように、ラージオブジェクトインタフェースを内部で使用しているかもしれません。 ここでは説明しません。

29.1. 歴史

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

PostgreSQL 7.1では、単一データページよりもかなり大きなデータ値を持つことができる("TOAST"というニックネームの)機構を導入しました。 これによりラージオブジェクト機能の一部は旧式のものになりました。 ラージオブジェクト機能に残る利点の1つは、そのサイズが2ギガバイトまで可能であるという点です。 TOASTではフィールドは1ギガバイトまでしか扱えません。 また、ラージオブジェクトは、普通のデータフィールドよりもかなり簡単に部分部分の操作を行うことができます。 ですので、実質的な制限はかなり異なります。