51.30. pg_largeobject

目录pg_largeobject包含构成“大对象”的数据。大对象由创建对象时分配的 OID 标识。每个大对象都被分成足够小的小段或“页面”,以方便地作为行存储在pg_largeobject中。每页的数据量定义为LOBLKSIZE(当前为BLCKSZ/4,通常为 2 kB)。

在 PostgreSQL 9.0 之前,没有与大对象相关的权限结构。结果,pg_largeobject是公共可读的,可以用来获取系统中所有大型对象的 OID(和内容)。这已不再是这种情况;使用pg_largeobject_metadata获取大对象 OID 的列表。

表 51.30. pg_largeobject

NameTypeReferencesDescription
loidoidpg_largeobject_metadata.oid包含此页面的大对象的标识符
pagenoint4 该页面在其大对象内的页码(从零开始计数)
databytea 实际数据存储在大对象中。这永远不会超过LOBLKSIZE个字节,并且可能会更少。

pg_largeobject的每一行都保存一个大对象一页的数据,该数据从对象内的字节偏移量(pageno * LOBLKSIZE)开始。该实现允许稀疏存储:页面可能丢失,并且即使不是对象的最后一页,也可能少于LOBLKSIZE个字节。大对象内的缺失区域读为零。