PocketBase 的自我描述是「一个文件里的实时后端」。翻成大白话:下载一个 exe,双击跑起来,你就有了一套带数据库的后端服务,REST API、管理后台、账号体系、文件上传、实时订阅全都自带了,不用写一行服务端代码。

32 MB 一个 exe,0.58 秒起服务

官方 Windows 包 12,833,751 字节,解开是一个 pocketbase.exe,33,470,976 字节。没有安装程序,没有 Node,没有单独的数据库进程,SQLite 直接编译在二进制里。

pocketbase_0.40.5_windows_amd64.zip   12,833,751 字节
  └─ pocketbase.exe                   33,470,976 字节
进程到 /api/health 返回 200            0.58 秒
常驻内存                              40,504 K
数据目录 pb_data\                      自动生成

启动命令就一句,端口自己指定。绑 127.0.0.1 是只给自己用,改成 0.0.0.0 就是局域网可访问。

pocketbase.exe serve --http=127.0.0.1:8090

第一次跑会在同目录生成 pb_data,里面是 SQLite 文件和日志。整个后端的状态就是这一个文件夹,备份直接拷走。

第一次启动会打一串东西出来

它不只是打印个地址,还会把 REST API 前缀、Dashboard 入口、以及一个带 token 的初始化链接一起吐在控制台里。粘进浏览器就能设管理员账号。

Server started at http://127.0.0.1:8090
├─ REST API:  http://127.0.0.1:8090/api/
└─ Dashboard: http://127.0.0.1:8090/_/

不想开浏览器也行,命令行一句话建账号:

pocketbase.exe superuser upsert [email protected] "你的密码"

建完拿这个账号去换 token,接口就通了。实测 auth-with-password 返回 200,token 后面所有请求都要带。

后台就是一张表

进 /_/ 看到的是左边 Collections 列表、右边数据表格。表头就是字段名,单元格直接显示值,布尔字段是 True / False 的色块,数字右对齐,每行末尾一个箭头点进详情。

Collections
  users     ← 内置的账号表(id / email / verified / name / avatar)
  notes     ← 自己建的
System

不用记 SQL,左侧「New collection」点开填字段名和类型就能建表。实测建一个 notes 表,4 个字段(title 文本 / body 文本 / done 布尔 / score 数字),1 次 API 调用返回 200,界面 1 秒内出现新表。

每张表下面还有一个「API preview」按钮,点开列出这张表自动生成的 5 个接口(list / view / create / update / delete),每个都带完整 URL 和示例请求体,复制就能用。这是它和普通数据库工具最大的区别:不是让你查数据,是替你暴露接口。

写 100 条,0.14 秒

用 API 循环插 100 条记录,每条带 5 个字段,从第一条发到第 100 条返回,总耗时 0.14 秒。

操作次数或条数耗时换算
创建记录 POST1000.14 秒724 条/秒
列表查询 GET 50 条201.1 毫秒中位
列表查询最快200.9 毫秒最小
列表查询最慢201.7 毫秒最大
启动到健康检查10.58 秒冷启动
常驻内存140504 KB空载

724 条/秒是单线程一条一条发的,不是批量接口。真实业务里更常见的是并发写入,那个数字会受 SQLite 的写锁影响,会比这个低一些。列表查询 1.1 毫秒这个数说明读路径很快,SQLite 加了索引之后更明显。

数据落地在 pb_data\data.db,120 条记录跑完是 4,096 字节(一页),旁边还有一个 data.db-wal 197,792 字节,是预写日志。WAL 会在检查点之后合并回主文件,所以看体积要看 checkpoint 之后的值。

它到底是后端,不是应用

这一点最容易误会。装完之后你没有博客、没有论坛、没有网盘,只有 1 个空后端和 5 个接口。前端要自己写,或者接现成的模板。

它替你做的是那些「每个项目都要重写一遍」的部分:账号注册登录、权限规则(谁能读谁能写,写成表达式)、文件上传和缩略图、实时订阅(SSE 推消息)、后台管理界面、数据导入导出。

反过来说,如果你想找一个「装完就能用的成品」,它不合适,去看同类的成品应用。它的定位更靠近「一个人也能撑起一个后端」,适合做小工具的服务端、给静态页面加数据存储、做内部系统的原型。

几个要注意的地方

SQLite 是单写入者的模型。同时开 10 个写入连接持续压,就会报 database is locked 错误,官方给的解法是开 WAL 模式(默认已开)再把写操作串行化,不是靠加机器解决。单机写入超过几百条/秒这种场景,它不支持。

默认没有 HTTPS,也没有多机部署能力,pb_data 在 1 台机器上就是 1 份数据。要做多实例得自己上对象存储和外置数据库,那就失去「一个文件」的意义了。

还有一点:它的版本号还在 0.x(当前 0.40.5),升级时偶尔有破坏性改动,升级前要看 CHANGELOG。包里那个 CHANGELOG.md 就是官方原文,建议先扫一眼。

没测的部分列一下,5 项:实时订阅(SSE)的实际延迟 / 文件上传与缩略图 / 权限规则的复杂表达式 / 从 SQLite 迁到 Postgres / 反向代理加 HTTPS,都没跑。