PostgreSQLにはラージオブジェクト機能があります。 これは、特殊なラージオブジェクト構造に格納されたユーザデータに対してストリーム様式のアクセスを提供します。 全体をまるごと簡単に操作するには巨大すぎるデータ値を操作する場合、ストリーミングアクセスが有用です。
本章では、PostgreSQLラージオブジェクトデータに関する、実装、プログラミング、問い合わせ言語インタフェースについて説明します。 libpq Cライブラリを例として本章で使用していますが、ほとんどのPostgreSQL固有のプログラミングインタフェースは同等の機能を持っています。 他のインタフェースでは、巨大な値を汎用的にサポートできるように、ラージオブジェクトインタフェースを内部で使用しているかもしれません。 ここでは説明しません。
PostgreSQLの間接的な派生元であるPOSTGRES 4.2はラージオブジェクトに関して3つの標準実装、POSTGRESサーバ外部のファイル、POSTGRESサーバで管理される外部ファイル、POSTGRESデータベース内に格納されるデータ、をサポートしていました。 これはかなりユーザの混乱を招きました。 その結果、データベース内に格納されるデータとしてのラージオブジェクトのみをPostgreSQLではサポートしました。 これによってアクセスが少々遅くなりましたが、より厳密に一貫性を持ったデータを提供するようになりました。 歴史的な理由により、この格納の仕組みは転置ラージオブジェクトと呼ばれています。 (この節では、「転置」と「ラージオブジェクト」の両方を使用していますが、どちらも同じ意味です。) PostgreSQL 7.1からは、全てのラージオブジェクトはpg_largeobjectと呼ばれる、1つのシステムテーブルに格納されます。
PostgreSQL 7.1では、単一データページよりもかなり大きなデータ値を持つことができる("TOAST"というニックネームの)機構を導入しました。 これによりラージオブジェクト機能の一部は旧式のものになりました。 ラージオブジェクト機能に残る利点の1つは、そのサイズが2GBまで可能であるという点です。 TOASTではフィールドは1GBまでしか扱えません。 また、ラージオブジェクトは、普通のデータフィールドよりもかなり簡単に部分部分の操作を行うことができます。 ですので、実質的な制限はかなり異なります。