概述
有时候,你可能需要在 PostgreSQL 中管理大对象,例如 CLOB、BLOB 和 BFILE。PostgreSQL 中有两种处理大对象的方法:一种是使用现有的数据类型,例如用于二进制大对象的 bytea 和用于基于字符的大对象的 text;另一种是使用 pg_largeobject。本文将解释如何使用 pg_largeobject。
pg_largeobject
pg_largeobject 是 PostgreSQL 提供的大对象解决方案之一,它允许以流式方式访问存储在特殊大对象结构中的用户数据。当处理的数据值过大而无法作为一个整体方便地操作时,流式访问非常有用。
pg_largeobject 是一个用于存储实际大对象的系统表。每个大对象在系统表 pg_largeobject_metadata 中都有一个条目。使用 pg_largeobject 管理的大对象可以通过读/写 API 进行创建、修改和删除。pg_largeobject 允许存储高达 4TB 的大对象。
另一种大对象解决方案是使用现有的数据类型 bytea 和 text,它们基于 TOAST 表构建,限制了大对象的大小为 1GB。
以下是为 pg_largeobject 设计的两个系统表的架构。
postgres=# \d+ pg_largeobject;
Table "pg_catalog.pg_largeobject"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
--------+---------+-----------+----------+---------+----------+-------------+--------------+-------------
loid | oid | | not null | | plain | | |
pageno | integer | | not null | | plain | | |
data | bytea | | not null | | extended | | |
Indexes:
"pg_largeobject_loid_pn_index" PRIMARY KEY, btree (loid, pageno)
Access method: heap
postgres=# \d+ pg_largeobject_metadata;
Table "pg_catalog.pg_largeobject_metadata"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
----------+-----------+-----------+----------+---------+----------+-------------+--------------+-------------
oid | oid | | not

最低0.47元/天 解锁文章
92

被折叠的 条评论
为什么被折叠?



