- 后端
- 数据库
- 文档数据库
【免费下载链接】FerretDB
A truly Open Source MongoDB alternative
FerretDB 是一款真正开源的 MongoDB 替代品,其核心设计理念是将 MongoDB 友好、易用的查询语法映射到 PostgreSQL 后端之上,因此几乎所有 PostgreSQL 生态中的管理、扩展与部署工具都能直接复用。本篇技术指南将以官方博客文档为主体,讲解如何借助 CommandPrompt 出品的开源 Postgres GUI 工具PgManage,完成 FerretDB 数据的管理、查询与服务器配置,并辅以仓库源码与配置文件佐证关键实现细节。读者读完本文后,将掌握从 Docker 搭建 FerretDB + PostgreSQL 环境、写入 MongoDB 示例数据,到在 PgManage 中连接并运维整套数据库的完整实战链路。
PgManage:为 Postgres 而生的开源 GUI 管理平台
FerretDB 的一大优势在于:你可以把它部署在几乎任何 PostgreSQL 管理架构之上进行管理、扩展与运维,PgManage 正是其中之一。PgManage 是 CommandPrompt, Inc. 提供的开源 Postgres GUI 管理平台产品,虽然仍处于持续开发阶段,但已经具备相当完整的可用能力。
它能查询并管理多种数据库管理系统,包括PostgreSQL、MySQL、SQLite 与 Oracle。其底层构建在现已停止维护的 OmniDB 项目的优秀成果之上,提供查询管理、数据库监控、服务器配置等一整套界面化操作能力。
对于 FerretDB 用户与爱好者而言,PgManage 可以成为管理 FerretDB 数据的理想 Postgres GUI 管理工具——你既能继续使用 MongoDB 的查询习惯写业务代码,又能借助成熟的 Postgres 管理界面查看、治理底层数据。
安装与设置
本教程在 macOS 系统上验证通过,同时也提供了适用于其他操作系统的安装方式说明。
安装 PgManage
PgManage 的安装指南详细列出了 Mac、Windows 与 Linux 系统各自不同的安装选项。需要注意的是:在desktop-app(桌面应用)模式下,PgManage 无需注册任何账号,只需要设置一个用于凭据加密的master password(主密码)即可开始使用。
设置 FerretDB
FerretDB 侧我们采用官方文档中的 Docker 快速启动方案,但需要对docker-composeYAML 文件做几处关键调整:
- 暴露 Postgres 端口:通过端口转发将
5432端口开放出来,使其能在容器外部被访问,这样像 PgManage 这样的应用程序才能直接连接; - 更新认证凭据:务必同步修改用户名与密码的认证信息。
调整后的docker-compose.yml完整示例如下:
services: postgres: image: postgres environment: - POSTGRES_USER=username - POSTGRES_PASSWORD=password - POSTGRES_DB=ferretdb volumes: - ./data:/var/lib/postgresql/data ports: - 5432:5432 ferretdb: image: ghcr.io/ferretdb/ferretdb restart: on-failure ports: - 27017:27017 environment: - FERRETDB_POSTGRESQL_URL=postgres://postgres:5432/ferretdb networks: default: name: ferretdb随后执行docker compose up -d即可启动全部服务。
从源码角度看,FERRETDB_POSTGRESQL_URL正是 FerretDB 连接后端 PostgreSQL 的核心环境变量。在仓库的部署文件中可以看到同样的使用模式,例如 build/ferretdb.service 中配置为Environment="FERRETDB_POSTGRESQL_URL=postgres://127.0.0.1:5432/postgres",而 build/ferretdb/evaluation/entrypoint.sh 中则将其与POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB等环境变量动态拼接:export FERRETDB_POSTGRESQL_URL="postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}"。可见该变量的构成约定为postgres://<用户名>[:<密码>]@<主机>:<端口>/<数据库名>,其中5432是 FerretDB 默认连接的 PostgreSQL 端口。
仓库根目录的 docker-compose.yml 还展示了更贴近开发环境的配置参考:同样将5432端口映射到宿主机,并设置POSTGRES_USER=pg-user、POSTGRES_PASSWORD=pg-pass等凭据变量,同时通过-c max_connections=400等 Postgres 启动参数调整连接容量——这些经验都可以迁移到你的自定义 compose 文件中。
FerretDB 中的基本操作
FerretDB 使你能够执行 MongoDB 的查询与命令,并将数据存储到 Postgres 中。为了演示,我们向 FerretDB 数据库写入一批示例数据。
如果你本机装有mongosh,可直接使用以下连接 URI(替换为正确的认证凭据)连接 FerretDB:
mongodb://username:password@127.0.0.1/ferretdb?authMechanism=PLAIN如果没有安装mongosh,也可以通过临时 MongoDB 容器来运行:
docker run --rm -it --network=ferretdb --entrypoint=mongosh mongo \ "mongodb://username:password@ferretdb/ferretdb?authMechanism=PLAIN"连接字符串中需要指定
authMechanism=PLAIN,即明文密码认证机制,这是 FerretDB 为简化 Docker 场景认证而支持的方式;此外请确认容器加入了与 compose 文件一致的ferretdb网络,以便通过服务名ferretdb解析到 FerretDB 容器。
接下来向testdata集合插入两条示例数据,终端输出大致如下:
$ docker run --rm -it --network=ferretdb --entrypoint=mongosh mongo \ "mongodb://username:password@ferretdb/ferretdb?authMechanism=PLAIN" Current Mongosh Log ID: 64e7657774614fd82dd9853c Connecting to: mongodb://<credentials>@ferretdb/ferretdb?authMechanism=PLAIN&directConnection=true&appName=mongosh+1.10.1 Using MongoDB: 6.0.42 Using Mongosh: 1.10.1 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy). You can opt-out by running the disableTelemetry() command. ------ The server generated these startup warnings when booting 2023-08-24T14:13:12.343Z: Powered by FerretDB v1.8.0 and PostgreSQL 15.4. 2023-08-24T14:13:12.343Z: Please star us on GitHub: https://github.com/FerretDB/FerretDB. 2023-08-24T14:13:12.343Z: The telemetry state is undecided. 2023-08-24T14:13:12.344Z: Read more about FerretDB telemetry and how to opt out at https://beacon.ferretdb.io. ------ ferretdb> db.testdata.insertMany([{a: "b", b: 34}, {a: "c", b: [3, 5]}]) { acknowledged: true, insertedIds: { '0': ObjectId("64e765e074614fd82dd9853d"), '1': ObjectId("64e765e074614fd82dd9853e") } }从启动日志可以看到,本次会话由 FerretDB 与 PostgreSQL 15.4 共同支撑,这也印证了"FerretDB 协议兼容层 + Postgres 存储引擎"的分层架构。插入成功后返回的两条ObjectId即为文档的 MongoDB 风格唯一标识。
连接 PgManage 与 FerretDB
使用上面暴露出来的 Postgres 端口5432,配合该用户的认证凭据,即可在 PgManage 中连接ferretdb数据库。
具体步骤:登录 PgManage 后,切换到"Connections"(连接)选项卡,点击"Manage connections"(管理连接),随后添加一条新连接。
填写完毕后先测试连接(Test the connection)以确保成功,再保存更改。连接建立后,PgManage 就能访问ferretdb数据库中的全部数据。如下图所示,PgManage 会展示ferretdb中的全部数据库与表。
要查看刚写入的示例数据,可以导航到ferretdb数据库(在本例中即ferretdbschema),然后查询testdata表中的全部数据。此时在 PgManage 中能看到数据的JSONB 视图——这正是 FerretDB 将 BSON 文档映射到 Postgres 的典型呈现方式:MongoDB 侧以 BSON 存储的嵌套结构(如{a: "c", b: [3, 5]}中的数组b),在 Postgres 中会被保存为 JSONB 类型,便于保持文档的完整语义。
使用 PgManage 为 FerretDB 执行服务器配置
借助 PgManage,用户可以便捷地管理数据库、访问并修改服务器配置,同时充分利用其友好的用户界面与直接的ALTER SYSTEM命令支持。这种直截了当的方式免去了手动编辑postgresql.conf文件的麻烦。
操作方法是:在数据库对象树中右键单击根节点,然后从下拉菜单中选择"Server configuration"(服务器配置)。
随后即可像在普通 PostgreSQL 数据库中一样,在 PgManage 界面内配置各项服务器设置。
此外,用户还可以借助 PgManage 的"Config History"(配置历史)下拉菜单追踪每一次配置变更,并在需要时回退到之前的版本——这为 FerretDB 底层 Postgres 实例的调优提供了可审计、可回滚的安全保障。
结论
FerretDB 让用户既能享受 MongoDB 友好易用的查询语法,又能获得 PostgreSQL 后端的可靠性与健壮性——两者兼得。而对于 PostgreSQL 管理员来说,PgManage 是管理 FerretDB 数据库的得力工具,它提供了一个直观的界面来管理、扩展和配置你的服务器。关于 FerretDB 的更多信息,可参阅仓库的 README、官方文档以及 GitHub 主页。
无论你是 MongoDB 开发者希望透视底层存储,还是 PostgreSQL DBA 希望用熟悉的工具接管 MongoDB 工作负载,这套 "FerretDB + PgManage" 的组合都值得一试。
- 后端
- 数据库
- 文档数据库
【免费下载链接】FerretDB
A truly Open Source MongoDB alternative
相关推荐
Mathesar:基于PostgreSQL的数据管理工具
Mathesar:基于PostgreSQL的数据管理工具 1. 项目介绍 Mathesar是一款开源的数据管理工具,它提供了一个类似电子表格的界面,允许不同技术
数据库后端前端协作RedisDesktopManager:Redis数据库管理的终极GUI工具
RedisDesktopManager:Redis数据库管理的终极GUI工具 RedisDesktopManager(现更名为RESP.app)是一个跨平台的开
数据库客户端桌面应用LiteDB Studio 使用教程:轻量级NoSQL数据库的GUI管理工具
LiteDB Studio 使用教程:轻量级NoSQL数据库的GUI管理工具 项目介绍 LiteDB Studio 是一个专门为 LiteDB v5 设计的图形
桌面应用数据库客户端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考