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。 并且,大对象可以比普通数据值更容易地一片片操作,因此,实际地局限是不一定的。