大对象实现将大对象拆分为“块”,并将块存储在数据库中的行中。B 树索引可确保在进行随机访问读取和写入时快速搜索正确的块号。
针对大型对象的存储区块不必是连续的。例如,如果应用程序打开一个新的较大型对象,寻址至偏移量 1000000,并写入少量字节的信息,这并不会导致分配 1000000 字节的存储空间;只有实际上写入的数据字节范围内的块会得到分配。然而,读取操作将对任何未分配的位置(在最后一个现有块之前)读出零。这对应于 “稀疏分配” 文件在Unix文件系统中的常见行为。
从 PostgreSQL 9.0 开始,大型对象拥有的一个所有者以及一组访问权限,这些可以通过 GRANT 和 REVOKE 进行管理。读取大型对象需要 SELECT
权限,写入或截断大型对象需要 UPDATE
权限。只有大型对象的拥有者(或数据库超级用户)才能够删除、评论、或更改大型对象的拥有者。要调整此行为以便与之前版本兼容,请参见 lo_compat_privileges 运行时参数。