Postgresql 中文操作指南
35.2. Implementation Features #
大型对象实现将大型对象分解为“块”,并将这些块存储在数据库中的行中。B 树索引确保在执行随机访问读取和写入时快速搜索正确的块号。
为大型对象存储的块不必是连续的。例如,如果某个应用程序打开了一个新的大型对象,seek 到偏移量 1000000,并在那里写入了一些字节,这不会导致分配 1000000 字节的存储;仅分配覆盖实际写入的数据字节范围的块。但是,读取操作将对最后一个现有块之前的任何未分配位置读取零。这与 Unix 文件系统中“稀疏分配”文件的常见行为相对应。
从 PostgreSQL 9.0 开始,大型对象拥有一个所有者和一组访问权限,可以使用 GRANT 和 REVOKE 来管理。需要 SELECT 权限来读取大型对象,需要 UPDATE 权限来写入或截断大型对象。只有大型对象的所有者(或数据库超级用户)才能删除、注释或更改大型对象的所有者。要调整此行为以与先前版本兼容,请参见 lo_compat_privileges 运行时参数。