太棒了,我很喜欢Supabase。 但当我看到“备份”坐在付费计划后面时,我的大脑做了每个破碎的创始人的大脑: “I can build that.” 是的,你可以。 免费计划. 真正的自动化. 没有服务器. 没有在2点醒来,记住“哦,是的,我应该抛弃我的数据库。 这篇文章展示了我如何建立 使用 ,加上你可能会遇到的所有令人烦恼的小错误(所以你不必)。 automatic Supabase Postgres backups every 12 hours GitHub Actions 我们正在建设什么 一次性设置,即: 每12小时跑 连接到您的 Supabase Postgres 数据库 创建一个 .dump 备份文件(压缩,正确的格式) 将其存储在私人 GitHub 复印件中作为版本文件 没有付费Supabase计划,没有第三方服务,没有VPS,只是GitHub做无聊的工作。 你唯一需要理解的 数据库备份就像一个伞。 如果你等到下雨,你已经湿了。 此外,“我只是重新创建它”是一个谎言,你告诉自己,当你从未重新创建它,Supabase免费计划基本上是一个黑洞,如果你被黑客攻击,没有历史回归。 步骤 0:创建一个私人 Repo 创建 a GitHub 存储库称之为: private myapp-db 备份 备份备份 notpayingforshiii-db备份(如果你是我) 此 repo 将存储您的备份文件。 github repo 专门用于备份 步骤 1:获取正确的 Supabase 连接字符串(此部分重要) 进入您的 Supabase 项目: 是的 Settings → Database → Connection string 现在,这里是陷阱: 使用Session Pooler(不直接) 如果您在免费计划中,Supabase 通常会显示: 直接连接:不兼容IPv4 会话集群器: IPv4 兼容 如果你使用 Direct,你的工作流程会失败,你会认为宇宙讨厌你。 设置: 方法:Session Pooler 类型: URI 你会得到一个连接字符串,如: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres 重要: 用您的 Supabase 密码替换 [YOUR-PASSWORD] 位址,如果您不记得它,则在该连接的弹出窗口上有 db 密码重置链接。 步骤 2:将连接字符串添加为 GitHub 秘密 在您的 GitHub Repo 中: Settings → Secrets and variables → Actions → New repository secret 创造一个秘密: 网站名称:SUPABASE_DB_URL 值:粘贴完整的 Session Pooler 连接字符串 不要添加额外的空间,不要添加新线,不要变得可爱。 添加你的秘密 步骤 3:添加 GitHub 操作工作流文件 在您的 Repo 中,创建此文件: .github/workflows/backup.yml 是的,包括点,GitHub会自动创建文件夹。 现在插入这个完整的工作流程: name: Supabase Backupon: schedule: - cron: "0 */12 * * *" workflow_dispatch:jobs: backup: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Install matching PostgreSQL client env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | sudo apt-get update sudo apt-get install -y wget ca-certificates lsb-release postgresql-client SERVER_VERSION=$(psql "$DATABASE_URL" -tAc "SHOW server_version_num;" | cut -c1-2) echo "SERVER_VERSION=$SERVER_VERSION" >> $GITHUB_ENV wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list sudo apt-get update sudo apt-get install -y postgresql-client-$SERVER_VERSION - name: Run pg_dump env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | mkdir -p backups /usr/lib/postgresql/$SERVER_VERSION/bin/pg_dump "$DATABASE_URL" \ --format=custom \ --file=backups/supabase_$(date +%F_%H-%M).dump - name: Commit backup run: | git config user.name "supabase-backup-bot" git config user.email "backup@github.com" git add backups git commit -m "Automated Supabase backup" || echo "No changes" git pushWhat this does: 检测 Supabase DB Postgres 版本 安装匹配的 pg_dump 创建一个 .dump 文件 让它进入你的Repo 这个版本是 : 如果 Supabase 稍后升级 Postgres,则工作流会调整。 future-proof 步骤 4: 给 GitHub Actions 允许推 做这个 ,因为备份尝试时会失败 回到你的 Repo。 before you run the workflow save (commit + push) the database dump 以下是如何允许它: Repo → 设置 → 操作 → 一般 → 工作流权限 选择: ✅ 阅读和写入权限 点击 . Save 步骤 5:手动运行一次 现在,测试它,以确保它在您轻松休息之前工作。 去你的 Repo: Actions → Supabase Backup → Run workflow 如果成功了: 你会看到一个新的文件夹:备份/ 一个类似的文件: supabase_2026-01-24_00-15.dump 存储桶怎么样? 此备份是为您的 . Postgres database 它不包括: Supabase 存储文件(图像,视频,上传) Edge 功能代码 日志 如果你也需要存储备份,你会想要一个单独的过程(S3兼容的同步或脚本 - 可以扩展这一切,但我在我的情况下只需要数据库)。 奖金:让你的复制品永远不增长(可选) 如果你不希望无限的备份堆积起来,你可以自动删除旧的文件(例如,保持最后30)。 最后的想法 您不需要付费计划来拥有成人备份。 你只需要: GitHub 重复 一个秘密 一个工作流程 一个许可 toggle 现在你的数据库每12小时都有备份,而你睡觉,发货,假装你不负责生产。 如果你发现这是有用的,请自由地偷走它,这就是文化。