在 PostgreSQL 7.1 以前的版本里, 记录存储在数据页面里并且单个记录里的数据大小不能超过数据页面的大小。 因为数据页面大小是8192 字节(缺省,可以增加到 32768), 所以可存储数据值的上限是相当低的。为了存储更大的原子数值, PostgreSQL 提供了大对象接口。 这个接口给用户提供对存储在特殊大对象结构的用户数据的面向文件的接口。
本章描述 PostgreSQL 大对象数据的实现以及编程和查询语言接口。 我们在本章中使用 libpq 的 C 库作为例子, 但是大多数 PostgreSQL 内置的接口都支持等效的功能。 其它接口可以在内部使用大对象接口以提供对大对象值的一般性支持。那些内容没有在这里描述。
最初,PostgreSQL 4.2(PostgreSQL 的间接前身)支持三种大对象的标准实现: 作为 POSTGRES服务器外部的文件扩展, 作为由 POSTGRES 管理的外部文件, 以及作为存储在 POSTGRES 数据库里面的数据. 这样做容易导致用户的迷惑.结果是,我们只支持把大对象作为数据存储在 PostgreSQL 数据库里. 即使这样做令数据访问变得有些慢,但却保证了更严格的数据完整性. 由于历史原因,这种存储机制被称为转置大对象. (我们将在本章中交互使用转置和大对象来表示同一个意思)。 自 PostgreSQL 7.1 开始,所由大对象都保留在一个叫pg_largeobject的系统表里.
PostgreSQL 7.1 引入了一种新的机制(外号叫 "TOAST"),允许数据行 远远大于独立的数据页面。这样就令大对象接口在一定程度上过时了。 大对象接口剩余的一个优点是它允许数据最大有 2 G,而 TOAST只能处理 1 G。