大对象的实现将大对象分解成“块”,并将这些块存储在数据库的行中。B 树索引保证在进行随机访问读写时快速搜索到正确的块号。
为大对象存储的块不必是连续的。例如,如果应用程序打开一个新的大对象,定位到偏移量 1000000,并在那里写入几个字节,这不会导致分配 1000000 字节的存储空间;只会分配覆盖实际写入的数据字节范围的块。但是,读取操作将读取出任何未分配的位置(位于最后一个现有块之前的)的零值。这对应于“稀疏分配”文件在Unix文件系统中的常见行为。
自 PostgreSQL 9.0 起,大对象具有所有者和一组访问权限,可以使用 GRANT 和 REVOKE 进行管理。需要 SELECT
权限才能读取大对象,需要 UPDATE
权限才能写入或截断大对象。只有大对象的所有者(或数据库超级用户)才能删除、注释或更改大对象的所有者。要调整此行为以与之前的版本兼容,请参阅 lo_compat_privileges 运行时参数。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用 此表单 报告文档问题。