pgrust 大对象与 TOAST:超大字段存储的完整方案
pgrust 大对象与 TOAST超大字段存储的完整方案【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust当数据库里出现几 MB 甚至几 GB 的图片、文档或 JSON 时如何高效存储而不拖垮查询性能pgrust 大对象与 TOAST 机制给出了完整答案。pgrust 是一个用 Rust 重写 PostgreSQL 的开源数据库目标是与 Postgres 18.3 保持磁盘级兼容并在此之上实现更快的性能——在最新的未发布版本中事务负载比 Postgres 快 50%分析负载快约 300 倍。本文将带新手彻底搞懂 pgrust 的超大字段存储方案行内字段如何自动压缩外置TOAST海量二进制数据如何通过大对象Large Object分页存储以及两者的选用场景。为什么要单独设计超大字段存储PostgreSQL 的数据页默认只有 8KB一条记录不能跨页存放。这带来一个经典难题场景字段大小直接存入行内的问题用户头像、PDF 文件几 MB一行塞不下频繁 IO大型 JSON/日志文本几百 KB每次查询都要搬运大块数据视频切片、备份数据几百 MB远超单行上限Postgres 的解决方案是两条腿走路TOAST 负责行内大字段的自动处理大对象负责任意大小的二进制流。pgrust 完整移植了这两套机制并保留相同的磁盘格式因此可以直接挂载已有的 Postgres 18.3 数据目录。TOAST行内大字段的自动压缩与外置TOASTThe Oversized-Attribute Storage Technique是 PostgreSQL 处理大字段的核心技术pgrust 将其完整用 Rust 重写。当一行数据超过约 2KB 阈值时TOAST 会自动介入整个过程对上层 SQL 完全透明。TOAST 的三种策略TOAST 对每个字段提供四种存储策略可在建表时用STORAGE关键字指定PLAIN禁止压缩与外置仅限定长类型EXTENDED默认先尝试压缩压缩效果不佳再外置EXTERNAL直接外置不压缩MAIN优先压缩尽量留在行内。当行大小超过TOAST_TUPLE_THRESHOLD在 pgrust 中为 2032 字节时系统自动挑选大字段进行压缩或拆分。压缩与外置的实现路径pgrust 中 TOAST 的核心逻辑分布在几个专注的 crate 中crates/backend/access/heap/heaptoast/src/lib.rs定义TOAST_TUPLE_THRESHOLD、TOAST_MAX_CHUNK_SIZE等关键常量与入口函数heap_toast_insert_or_updatecrates/backend/access/common/toast_internals/src/lib.rs实现toast_save_datum把大值切块写入 TOAST 表、toast_fetch_datum按块重组回完整值、toast_delete_datum回收外置块以及toast_compress_datum压缩crates/backend/access/common/toast_compression/src/lib.rs在 PGLZ 与 LZ4 两种压缩算法间做选择PGLZ 始终可用crates/backend/access/table/toast_helper/src/lib.rs表访问层对 TOAST 的辅助封装crates/backend/catalog/toasting/src/lib.rs负责建表时自动创建配套的pg_toast表。TOAST 的存储细节外置后的值被切成固定大小的块每个块是一行独立记录存在专属的pg_toast_xxx表中单块最大载荷TOAST_MAX_CHUNK_SIZE由外部指针上限推导而来块记录包含外置值的 OID、块序号和数据本身读取时按块序号顺序扫描重组写入时按需追加新块。对于大对象这种特殊 varlena 类型还有一层间接指针indirect pointer优化若外置指针本身也太大则再包一层间接指针避免指针膨胀。这层逻辑同样保留在toast_internals的 detoast 静态处理中。大对象任意大小二进制流的正统方案TOAST 适合行内嵌大值而**大对象Large Object**面向的是真正的大文件——它把数据分成 2048 字节LOBLKSIZE即 8KB 数据页的 1/4的页存储在系统表pg_largeobject中最大可达约 4TB。大对象的实现路径pgrust 将 Postgres 的inv_api.c完整移植到 Rust位于crates/backend/storage/large/object/src/lib.rs服务端大对象字节级 API包含inv_create创建、inv_open打开并做权限检查、inv_read顺序读、inv_write读写改页、inv_truncate截断、inv_seek/inv_tell随机定位、inv_drop删除crates/backend/catalog/pg_largeobject/src/lib.rspg_largeobject系统表的目录层支持crates/backend/catalog/pg_largeobject_seams/src/lib.rs目录访问的 seam 接缝层crates/backend/libpq/be_fsstubs/src/lib.rs把底层 API 包装成 SQL 可直接调用的lo_*函数。值得留意的是原 C 代码用文件级静态变量缓存pg_largeobject的关系引用pgrust 的 Rust 版改为在每次操作的内存上下文中直接打开关系、结束时以NoLock释放语义等价且更符合 Rust 的所有权模型——这正体现了用 Rust 重写并保持行为一致的项目哲学。大对象的使用方式SQL 层通过lo_*函数操作大对象-- 创建大对象 SELECT lo_create(0); -- 从文件导入 SELECT lo_import(/path/to/bigfile.bin); -- 导出到文件 SELECT lo_export(oid, /path/to/out.bin); -- 在事务中读写客户端 API 通过 lo_open/lo_read/lo_write大对象要求在事务块内操作且支持随机读写与截断非常适合存储大文件、图片素材和流式数据。关键数值一览参数值说明LOBLKSIZE2048 字节大对象分页大小等于 BLCKSZ/4MAX_LARGE_OBJECT_SIZEINT_MAX × 2048大对象理论上限约 4TB写入策略读改写 补洞覆盖写入时先读整页再修改跳跃写入自动填充空洞TOAST 与大对象如何选择两者都能存放大字段但定位截然不同TOAST藏在行内的自动挡。字段本身仍是普通列参与查询、索引、WHERE 条件只是物理上被拆到旁路表。适合 JSON、长文本、中等体积的二进制几百 KB 到几 MB。大对象独立于行的文件系统。一个 OID 指向一串可随机读写的字节流但不能直接作为列被 WHERE 引用或建索引。适合超大文件、流式内容、需要随机访问的场景。一句话总结要查询语义选 TOAST要超大文件选大对象。如何上手体验 pgrustpgrust 目前处于快速发展期已通过超过 46000 条回归查询、与 Postgres 18.3 磁盘兼容。想体验它的超大字段存储能力可以克隆仓库自行构建git clone https://gitcode.com/GitHub_Trending/pg/pgrust项目采用 workspace 组织所有存储引擎模块都可在crates/backend/下按名称检索例如想看 TOAST 压缩细节就找toast_compression想看大对象分页逻辑就找storage/large/object——代码注释保留了与 C 源文件的对照关系是学习存储引擎的绝佳教材。结语从自动压缩外置的 TOAST到可随机读写的 2KB 分页大对象pgrust 用 Rust 完整复刻了 PostgreSQL 的超大字段存储方案并在内存管理、错误处理、所有权模型上做了更安全的现代化改造。对于想要深入理解数据库存储原理或正在评估 Rust 重写 Postgres 可行性的读者这套TOAST 大对象的组合就是最好的起点。【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

杰森·白|超级萌爱斯基摩人“步蓝奇”IP诞生,引爆热度

杰森·白|超级萌爱斯基摩人“步蓝奇”IP诞生,引爆热度

“possible可可和能能”是艺术家杰森白创作的经典形象,它们的好朋友诞生了,就是黄毛的,蓝鼻子的爱斯基摩人“步蓝奇”,仿佛不怕冷一样,总是光着身体,但是黄色的毛发还是挡住了它被走光的可能。

2026/8/18 15:40:57 阅读更多 →
lainTSX 是什么:在浏览器中游玩《Serial Experiments Lain》PSX 游戏的完整指南

lainTSX 是什么:在浏览器中游玩《Serial Experiments Lain》PSX 游戏的完整指南

lainTSX 是什么:在浏览器中游玩《Serial Experiments Lain》PSX 游戏的完整指南 【免费下载链接】lainTSX WebGL implementation of the Serial Experiments Lain PSX game 项目地址: https://gitcode.com/gh_mirrors/la/lainTSX lainTSX 是一个基于 WebGL 的…

2026/8/18 15:39:56 阅读更多 →
SceneDreamer应用前景盘点:AI生成3D世界在游戏、影视与元宇宙的落地潜力

SceneDreamer应用前景盘点:AI生成3D世界在游戏、影视与元宇宙的落地潜力

SceneDreamer应用前景盘点:AI生成3D世界在游戏、影视与元宇宙的落地潜力 【免费下载链接】SceneDreamer [TPAMI 2023] SceneDreamer: Unbounded 3D Scene Generation from 2D Image Collections 项目地址: https://gitcode.com/gh_mirrors/sc/SceneDreamer S…

2026/8/18 15:39:56 阅读更多 →

最新新闻

1美元自制光耦电平转换器:实现3.3V/5V安全隔离与信号转换

1美元自制光耦电平转换器:实现3.3V/5V安全隔离与信号转换

1. 项目缘起:为什么需要光耦电平转换器? 在玩转ESP32、STM32这类微控制器时,你肯定遇到过电平不匹配的烦恼。比如,你的ESP32的GPIO引脚输出是3.3V,但你想驱动一个老旧的5V Arduino Uno,或者控制一个需要5V逻…

2026/8/19 8:55:55 阅读更多 →
Tushare接口文档:北交所新旧代码对照表(bse_mapping)

Tushare接口文档:北交所新旧代码对照表(bse_mapping)

官方文档:https://tushare.pro/document/2?doc_id375功能描述:获取北交所股票代码变更后新旧代码映射表数据返回限量:单次请求最大返回1000行接口权限:2000积分说明:2025年10月9日起,北交所存量股票正式启…

2026/8/19 8:55:55 阅读更多 →
基于RP2040与以太网打造低功耗网络仪表盘:从DVI驱动到Adafruit IO集成

基于RP2040与以太网打造低功耗网络仪表盘:从DVI驱动到Adafruit IO集成

1. 项目概述:一个基于RP2040的桌面级网络仪表盘 最近在捣鼓一个桌面小玩意儿,起因很简单:我工位上的显示器除了写代码,大部分时间都空着,总想让它干点别的。我想实时看到一些网络数据,比如服务器状态、天气…

2026/8/19 8:55:55 阅读更多 →
知网维普万方AI率超标怎么办?10款降AI工具按平台选择!

知网维普万方AI率超标怎么办?10款降AI工具按平台选择!

论文降AI率怎么降?用什么降AI工具靠谱?2026年3月毕业季倒计时开始,知网、维普、万方的AIGC检测算法全面升级,选一款好用的降AI率软件成了每个毕业生的刚需。这篇文章手把手教你怎么选降AI工具、怎么用降AI工具,并实测推…

2026/8/19 8:55:55 阅读更多 →
英文降ai实操教程!教你如何避坑英文降aigc(附多款工具对比)

英文降ai实操教程!教你如何避坑英文降aigc(附多款工具对比)

不少人都体会过这样的情景: ddl 压在头顶,按照指导意见修改完文章,ai率还是特别高。我现在回想起来依旧心累。那段时间我翻遍全网,找 aigc 英文免费查询入口、agic 查看免费英文站点,踩了一堆广告漫天却毫无作用的平台…

2026/8/19 8:55:55 阅读更多 →
论文提交前最后一晚别慌:普通大学生按这6项检查

论文提交前最后一晚别慌:普通大学生按这6项检查

一、最后一晚最怕的不是大改,而是漏检查 很多普通大学生到了论文提交前一晚,状态都差不多:正文改了好几版,导师意见也处理了一部分,文件夹里有终稿、最终版、最终不改版、提交版。越到最后越慌,反而不知道…

2026/8/19 8:54:50 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →