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