FerretDB v1.13.0 新 PostgreSQL 后端:默认启用、Docker 数据目录与 pushdown 增强解读
后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载FerretDB v1.13.0 是 FerretDB 在 2023 年 10 月发布的一个重要里程碑版本此前数月持续迭代的新 PostgreSQL 后端在该版本中正式默认启用同时带来了 Docker 镜像默认 SQLite 数据目录改为/state卷、linux/arm/v7平台支持、以及针对 PostgreSQL/SQLite 两个后端的查询下推pushdown增强。本文以官方发布说明 website/blog/2023-10-24-ferretdb-v1130-new-postgresql-backend.md 为主线结合当前仓库中的源码与构建配置逐项解读这些变更的技术细节、配置方式与升级注意事项。说明本文描述的是 FerretDB v1.13.0 发布时的历史事实当前仓库代码已演进至 v2 架构基于 PostgreSQL DocumentDB 扩展文中引用当前仓库文件仅用于佐证相关机制如/state目录、--postgresql-url参数等的延续与实现请注意区分版本语境。版本概览v1.13.0 带来了什么本次发布的核心变更可以归纳为四点新 PostgreSQL 后端正式默认启用旧后端可通过--postgresql-old标志或FERRETDB_POSTGRESQL_OLDtrue环境变量临时回退但该回退开关将在下一个版本移除Docker 镜像的 SQLite 默认数据目录改为/state该目录同时声明为 Docker 卷volume容器重启后数据默认得以保留新增linux/arm/v7支持覆盖二进制、Docker 镜像以及.deb/.rpm软件包性能与兼容性增强PostgreSQL 后端新增更多查询下推SQLite 后端新增_id: string过滤条件下推修复了_id字段校验 bug补齐了collStats、dbStats、聚合管道$collStats的部分缺失字段并为 PostgreSQL 后端加入基础日志能力。其中新 PostgreSQL 后端默认启用是本次发布最值得关注的架构级变化下文优先展开。新 PostgreSQL 后端从默认关闭到默认开启为什么会有新 PostgreSQL 后端在 v1.13.0 之前的版本中FerretDB 同时维护两套 PostgreSQL 后端实现旧后端承载着早期功能而新后端是团队花数月时间重写的实现目标是更完整的 MongoDB 兼容性、更高效的查询下推以及更稳定的行为。v1.13.0 将新后端提升为默认路径标志着它已具备承担日常使用的能力。默认启用与临时回退开关升级到 v1.13.0 后无需任何额外配置即可使用新后端。如果遇到新后端行为与旧后端不一致的问题可以临时回退# 方式一命令行标志 ferretdb --postgresql-old # 方式二环境变量 FERRETDB_POSTGRESQL_OLDtrue ferretdb发布说明明确强调该回退选项将在下一版本v1.14中移除因此它只适合作为升级过渡期的应急手段不应作为长期运行配置。从当前仓库的 CLI 定义cmd/ferretdb/main.go可以看到PostgreSQL 连接相关的核心参数至今依然沿用--postgresql-url形态默认值为postgres://127.0.0.1:5432/postgres并支持通过--postgresql-url-file从文件中读取连接串非空时覆盖前者。这类标志 同名环境变量FERRETDB_前缀见kong.DefaultEnvars(FERRETDB)的双通道配置模式正是发布说明中FERRETDB_POSTGRESQL_OLD环境变量能够生效的底层机制——所有 CLI 参数都可以用FERRETDB_ 大写参数名的方式以环境变量注入。从源码看新后端的运行形态虽然仓库当前已是 v2 代码库但从结构上仍能清晰地看到新后端的核心特征处理命令直接面向 PostgreSQL 连接例如collStats与dbStats命令的处理逻辑internal/handler/msg_collstats.go、internal/handler/msg_dbstats.go都通过h.p.WithConn取得一个pgx.Conn再调用documentdb_api.CollStats/documentdb_api.DbStats执行实际查询命令处理与数据库访问解耦命令入口位于 internal/handler实际 SQL 执行位于 internal/documentdb/documentdb_api中间由 internal/documentdb 的连接池pool.go管理连接生命周期。这印证了发布说明中PostgreSQL 后端承载 collStats/dbStats 等统计命令的描述也说明统计类命令最终是在 PostgreSQL 侧计算并返回结果的。Docker 镜像SQLite 默认数据目录改为/state卷变更内容从 v1.13.0 起FerretDB 的 Docker 镜像为 SQLite 后端引入了默认数据目录/state。该目录被声明为 Docker 卷因此容器重启后数据默认保留无需手动挂载 volume数据持久化的默认体验得到显著改善降低了误操作丢失数据的风险。影响范围与例外发布说明特别指出此变更不影响二进制发行版以及.deb/.rpm软件包——这些形态的默认数据目录保持原样只有 Docker 镜像采用了新的/state约定。当前仓库中的印证虽然 v1.13.0 距今已久但/state目录约定在仓库中一直延续至今。在 build/ferretdb/production.Dockerfile 中可以看到VOLUME /state ENV FERRETDB_STATE_DIR/statedevelopment.Dockerfile、eval.Dockerfile、eval-dev.Dockerfile同样声明了VOLUME /state与ENV FERRETDB_STATE_DIR/state。对应地cmd/ferretdb/main.go 中的StateDir参数--state-dir默认.与state.NewProviderDir(cli.StateDir)cmd/ferretdb/main.go构成了状态目录的解析链路——镜像通过ENV FERRETDB_STATE_DIR/state将进程状态目录指到/state再叠加VOLUME声明实现数据持久化。这正是 v1.13.0 发布说明所述目录同时是 Docker 卷重启后数据默认保留的完整实现。平台支持linux/arm/v7v1.13.0 是 FerretDB 较早覆盖 32 位 ARM 平台arm/v7的版本之一新增形态包括linux/arm/v7二进制对应架构的 Docker 镜像linux/arm/v7的.deb/.rpm软件包。这对于运行在树莓派等 ARM 单板计算机上的用户尤为重要——意味着小型化、边缘化部署场景如自建家庭服务器、IoT 环境中的数据存储可以使用官方发布产物而无需自行交叉编译。所有发行产物均可在项目的 GitHub Releases 页面按 tag 下载。提示当前仓库的构建体系已演进arm/v7是否仍作为持续发布的架构矩阵之一以各版本实际发布的 Release 产物为准。本段落描述的是 v1.13.0 发布时的客观事实。性能增强更深的查询下推pushdownPostgreSQL 后端新增更多下推查询下推是指把本应在 FerretDB 进程内完成的过滤、排序、聚合等操作转换为 SQL 交给 PostgreSQL 执行从而减少 FerretDB 与数据库之间的数据传输量充分利用 PostgreSQL 的索引与执行引擎降低内存占用与 CPU 开销。v1.13.0 为 PostgreSQL 后端引入了额外的下推使得更多类型的查询能够直接在数据库层完成。发布说明推荐通过此前的博客文章了解 FerretDB 下推的整体原理仓库内亦可参考 website/versioned_docs/version-v1.24/pushdown.md 了解下推机制的文档化描述。SQLite 后端_id: string过滤下推SQLite 后端在 v1.13.0 中新增了_id: string形式过滤条件的下推。当查询形如db.collection.find({ _id: some-string-id })时该条件可以被直接下推到 SQLite 的WHERE子句而无需先全量拉取文档再在内存中过滤。字符串类型的_id是 MongoDB 中最常见的文档标识形态因此该优化覆盖面广、实用价值高。其他变更bug 修复与统计命令补齐修复_id字段非法校验导致的误报此前版本存在一个由_id字段校验逻辑不严谨引发的 bug当尝试插入形如下面的文档时db.test.insertOne({ _id: 1, v: { _id: [foo, bar] } })会被错误地拒绝并返回_idvalue cannot be of type array的错误。问题根源在于校验逻辑未能区分顶层_id与嵌套在普通字段v内部的_id——后者只是嵌套文档中的一个普通字段其值完全可以是数组。v1.13.0 修正了这一误判仅对真正的顶层_id字段施加类型约束。补齐collStats、dbStats、$collStats字段本次发布补齐了collStats、dbStats以及聚合管道$collStats阶段中此前缺失的部分字段使统计类输出更贴近 MongoDB 的返回结构。从当前仓库实现看collStats命令支持scale参数internal/handler/msg_collstats.go并通过documentdb_api.CollStats在 PostgreSQL 侧计算dbStats命令则固定以 scale1 调用documentdb_api.DbStatsinternal/handler/msg_dbstats.go。这些细节说明统计命令并非简单转发而是有真实的数据库端计算逻辑支撑。PostgreSQL 后端基础日志v1.13.0 为 PostgreSQL 后端加入了基础日志能力便于排查连接问题、慢查询与错误行为。日志体系与 FerretDB 主进程一致当前仓库中由 internal/util/logging 统一管理支持console/text/json/mongo等格式见 cmd/ferretdb/main.go 的logFormats定义用户在调试后端行为时可通过日志定位 SQL 执行层面的异常。升级与运行建议结合发布说明与当前仓库的配置机制升级到 v1.13.0或参考其配置模式部署新版本时有几点实践建议新后端默认启用先做兼容性验证升级后先运行常规读写、查询与聚合用例确认业务行为符合预期若遇到问题可用--postgresql-old或FERRETDB_POSTGRESQL_OLDtrue临时回退但应尽快定位并跟进修复因为回退开关将在下一版本移除Docker 部署注意数据目录镜像默认将 SQLite 数据写入/state该目录已是 Docker 卷重启不会丢数据若需要自定义位置可显式指定--state-dir或FERRETDB_STATE_DIR并手动挂载对应卷连接串两种注入方式PostgreSQL 连接既可用--postgresql-url指定也可用--postgresql-url-file指向包含连接串的文件后者优先级更高适合在容器或密钥管理场景下使用参考 cmd/ferretdb/main.go查询性能依赖_id: string精确过滤、以及可下推的过滤/排序/聚合条件的查询在本次发布后可获得更好的执行效率。结语FerretDB v1.13.0 通过新 PostgreSQL 后端默认启用 Docker 默认持久化目录 arm/v7 支持 更深的下推优化这组组合拳显著降低了用户的上手成本与部署门槛同时为后续性能与兼容性工作奠定了基础。理解这些变更背后的配置机制标志与环境变量的双通道、/state卷约定、下推与统计命令的数据库端实现有助于在升级 FerretDB 时做出正确的部署决策也能为阅读当前仓库中 cmd/ferretdb/main.go、internal/handler 与 build/ferretdb 下的源码提供清晰的上下文。赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐FerretDB v1.12 发布解读新 PostgreSQL 后端、arm64 支持与可观测性增强FerretDB v1.12 发布解读新 PostgreSQL 后端、arm64 支持与可观测性增强 FerretDB v1.12 是该项目迈向以全新架构支后端数据库文档数据库FerretDB Query Pushdown 详解把过滤下推到 PostgreSQL减少数据读取FerretDB Query Pushdown 详解把过滤下推到 PostgreSQL减少数据读取 Query pushdown查询下推是 Ferret后端数据库文档数据库如何把QQ空间十年老说说不丢一条地备份下来GetQzonehistory 完整实操指南如何把QQ空间十年老说说不丢一条地备份下来GetQzonehistory 完整实操指南 几年前写在QQ空间里的说说现在想留个底只能一页页翻、一张张截图。G网页爬虫数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

opencodex 模型排序完全指南:Codex Picker 顺序规则、优先级表与实战配置

opencodex 模型排序完全指南:Codex Picker 顺序规则、优先级表与实战配置

【免费下载链接】opencodex Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code 项目地址: https://gitcode.com/gh_mirrors/ope/opencodex 点击…

2026/9/25 2:49:11 阅读更多 →
Presto 的 CREATE VIEW 语句完全指南:语法、安全模式与实战示例

Presto 的 CREATE VIEW 语句完全指南:语法、安全模式与实战示例

大数据数据库后端 【免费下载链接】presto The official home of the Presto distributed SQL query engine for big data 项目地址: https://gitcode.com/gh_mirrors/pre/presto 点击查看 免费下载 导读 本文基于 Presto 官方文档 presto-docs/src/main/sphinx/s…

2026/9/24 0:50:53 阅读更多 →
使用 Deployer 零停机部署 TYPO3 项目:完整实战指南

使用 Deployer 零停机部署 TYPO3 项目:完整实战指南

DevOpsCI/CDCLI开发工具运维 【免费下载链接】deployer The PHP deployment tool with support for popular frameworks out of the box 项目地址: https://gitcode.com/gh_mirrors/de/deployer 点击查看 免费下载 TYPO3 是德国企业级 PHP CMS,其 Compo…

2026/9/25 3:32:09 阅读更多 →

最新新闻

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 打开老页面只剩一块灰底,还提示“需要安装 Flash”…

2026/9/25 4:54:50 阅读更多 →
TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段

TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址: https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 TypeDoc 的 {include} 标签族允许你在 TSDoc 文档注释或外部 Markdown 文档中直接嵌入仓库里的…

2026/9/25 4:54:50 阅读更多 →
Miniconda vs Anaconda:虚拟环境管理与PyTorch CUDA配置实战

Miniconda vs Anaconda:虚拟环境管理与PyTorch CUDA配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:54:50 阅读更多 →
STM32F407移植FreeRTOS与LwIP:从CubeMX配置到TCP通信实战

STM32F407移植FreeRTOS与LwIP:从CubeMX配置到TCP通信实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:54:50 阅读更多 →
从AI对话Demo到可演进Agent平台:架构设计与工程实践

从AI对话Demo到可演进Agent平台:架构设计与工程实践

开篇:从 AI 对话 Demo 到可演进的 Agent 平台这两年 AI 圈最热闹的词,一个是“AI”,一个是“Agent”。市面上 Demo 满天飞,今天一个聊天机器人,明天一个自动写周报的工具,后天又冒出个能帮你订机票的智能体…

2026/9/25 4:54:50 阅读更多 →
低功耗电压检测电路设计:MOS管如何让电池多活一年

低功耗电压检测电路设计:MOS管如何让电池多活一年

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:53:50 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →