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