如何免费备份 Supabase 数据库

Supabase 是一个开源的后端即服务(BaaS)平台,提供实时数据库、身份验证、文件存储等功能,且提供了慷慨的免费计划。

但有一个关键问题:整个数据库仅存在于Supabase的云中,备份功能被锁定在付费计划后面。

虽然大厂一般情况下还是值得信赖的,但是在一些特殊情况下,比如:进行危险操作前、不可抗力因素、偶发性事件等等发生的时候,有一个备份还是很有必要的。

在免费计划中,我们可以借助 PostgreSQ 提供的 pg_dump 工具实现来实现备份和恢复功能。

PostgreSQ 工具

简介:pg_dump 是 PostgreSQL 提供的一个强大的命令行工具,用于备份数据库。它可以将数据库导出为 SQL 脚本或其他格式,方便数据迁移、备份和恢复。

1. 安装PostgreSQL工具

首先,需要在本地安装PostgreSQL才能访问pg_dump实用程序。

可以直接从 PostgreSQ官方 下载对应平台的安装包。如果不需要完整的 PostgreSQL 服务器可以只安装包含 pg_dump 的客户端工具。

MacOS 用户也可以通过 brew 进行安装:

brew install libpq
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc

修改 .zshrc 后必须重新加载才能生效,或者重启终端。

验证安装命令: pg_dump --version

2. 获取 Supabase 的连接信息

登陆 Supabase 仪表板,进入对应的项目,在顶栏找到 Connect (插头图标),点击进入寻找 Session pooler 一栏,里面的 URL 便是连接信息。

出于安全原因,数据库密码不会在这里显示。但是在创建数据库的时候你应该有保存密码,如果没有也没有关系,可以点击最下面的 Reset your database password 到 Database Settings 里面进行密码重置。

3. 执行备份

在本地终端使用 pg_dump 命令进行备份操作:

pg_dump -h db.xxxxxxxxxxxx.supabase.co \
  -U postgres \
  -d postgres \
  -F c \
  -f backup_$(date +%Y%m%d).dump
  • -h: 指定数据库服务器的主机名或IP地址。
  • -U: 指定连接数据库的用户名。
  • -d: 指定要备份的数据库名称。
  • -F c: 指定输出文件的格式为“自定义归档格式”(见参考内容)。
  • -f: 指定输出文件的路径和名称。

备份完成后文件应该大于几KB。空或小文件则表示备份可能失败。

参考内容

pg_dump 的 -F (或 —format) 参数用于指定备份文件的输出格式。选择不同的格式会直接影响备份文件的大小、可读性以及恢复时的灵活性。

特性 / 维度纯文本 (plain) -F p定制 (custom) -F c目录 (directory) -F dTar (tar) -F t
格式标识-F p (或不指定,为默认值)-F c-F d-F t
输出形式单个 .sql 文本文件单个 .dump 二进制文件一个包含多个文件的目录单个 .tar 归档文件
恢复工具psqlpg_restorepg_restorepg_restore
psql -d db < file.sqlpg_restore -d db file.dumppg_restore -d db backup_dir/pg_restore -d db file.tar
人类可读性完全可读
可直接用文本编辑器查看和修改SQL命令。
不可读
二进制格式,无法直接查看。
⚠️ 部分可读
目录中的 toc.dat (内容清单) 可读,但数据文件是二进制的。
不可读
二进制归档文件。
默认压缩不支持
文件体积最大。需手动用 gzip 等工具压缩。
支持 (默认开启)
使用 zlib 压缩,备份文件体积显著减小。
支持 (默认开启)
与 custom 格式相同,对目录内数据文件进行压缩。
不支持
Tar 仅是打包归档,本身不含压缩。
选择性恢复能力不支持
只能完整恢复。若想只恢复部分,需手动编辑SQL文件,极其复杂且易错。
极佳
可灵活恢复指定 Schema、表、索引、函数、数据、或仅恢复结构。
极佳
具备与 custom 格式完全相同的灵活恢复能力。
支持
同样具备灵活恢复能力,但效率可能略低于 custom/directory。
并行备份 (pg_dump -j)不支持
只能单线程导出。
不支持
因为需要写入单个文件流,无法并行。
唯一支持
可以同时导出多个表到不同文件,是备份超大数据库的最快方式
不支持
与 custom 类似,写入单个文件流。
并行恢复 (pg_restore -j)不支持
psql 是单线程执行SQL脚本。
支持
可并行加载数据,极大提升大型数据库的恢复速度。
支持
并行恢复效率最高,因为数据已分散在不同文件中。
支持
同样支持并行恢复。
主要优点- 简单直观:易于理解、审查和手动修改。
- 高兼容性:便于版本控制(Git),或少量修改后用于其他数据库。
- 功能均衡:集压缩、灵活恢复、快速恢复于一身。
- 可靠通用:是绝大多数场景的最佳选择
- 备份速度最快:唯一支持并行备份,是超大型数据库的福音。
- 恢复同样极快且灵活
- 单一文件:比目录格式更容易通过网络传输或管理。
- 保留元数据:Tar 格式的特性。
主要缺点- 体积庞大:无压缩。
- 恢复死板:全有或全无,出错即中断。
- 恢复缓慢:单线程,无优化。
- 备份非并行:对于超大型数据库,备份可能耗时较长。
- 不可读:无法直接检查内容。
- 管理不便:输出为目录,传输和存储不如单个文件方便 (需手动打包)。- 已被超越:功能上几乎完全被 custom 格式覆盖且性能更好。
- 无内置压缩
典型应用场景- 小型数据库备份。
- Schema 定义的版本控制。
- 教学和调试
- 需要手动修改SQL以迁移到异构数据库
- 日常生产备份 (95%的场景)。
- 在不同 PostgreSQL 版本间迁移
- 需要从备份中恢复特定对象的环境 (如恢复误删的表)。
- TB 级超大型数据库 (VLDB) 的备份。
- 备份窗口时间极其有限的场景。
- 遗留系统维护。
- 有特殊工具链要求必须使用 .tar 文件的场景。

如果不确定用哪个,或者没有极端需求,建议始终选择 -F c (custom)。它在文件大小、备份可靠性、恢复速度和灵活性之间提供了最佳的平衡点,能够满足绝大多数业务需求。

定期备份

对于 Supabase 来说,绝大部分时间应该都是安全的,官方肯定也有灾容备份管理。所以,我们只要定期/危险操作前进行下备份就可以了。

高级用户则可以根据需求编写脚本实现自动化。

数据无价