↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 2 章 大对象

2.1. 简介 #

在 7.1 之前的 PostgreSQL 版本中,数据库中任何一行的大小都不能超过一个数据页的大小。由于数据页的大小是 8192 字节(默认值,最高可以提高到 32768),数据值大小的上限相对较低。为了支持更大的原子值的存储,PostgreSQL 过去提供了、而且现在仍然提供大对象接口。该接口以面向文件的方式访问已被声明为大对象的用户数据。

PostgreSQL的间接前身 POSTGRES 4.2支持三种标准的大对象实现: 作为POSTGRES服务器外部的文件、作为由 POSTGRES服务器管理的外部文件,以及作为 存储在POSTGRES数据库内部的数据。这在 用户中造成了相当大的混乱。因此,PostgreSQL 中只保留了把大对象作为数据库内部存储数据的支持。虽然这样访问 速度较慢,但它提供了更严格的数据完整性。由于历史原因,这种存储 方案被称为Inversion 大对象。(你会看到 Inversion 一词偶尔也被用来表示大对象的同义词。)从 PostgreSQL 7.1开始,所有大对象都存放 在一个名为pg_largeobject的系统表中。

PostgreSQL 7.1 引入了一种机制(绰号 “TOAST”),它允许数据行远大于单个数据页。这使大对象接口在一定程度上过时了。大对象接口剩下的一个优点是它允许对数据的随机访问,也就是读写大值中一小块一小块内容的能力。未来计划为 TOAST 也配备这种功能。

本节描述 PostgreSQL 大对象数据的实现以及编程和查询语言接口。本节的例子使用 libpq C 库,但 PostgreSQL 原生的大多数编程接口都支持等价的功能。其他接口可能在内部使用大对象接口来提供对大值的通用支持。这里不对此进行描述。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。