本地数据库的表数据迁移至对应云平台,流程整理和问题总结:以supabase为例
本文记录开发者将本地 Docker 部署的 Supabase 数据库迁移至云端 Supabase 的实操过程。迁移中遇到两大核心问题:一是连接云端数据库时因 VPN、DNS 解析异常,出现服务器意外断开连接,关闭代理或设置直连、选用 Session Pooler 连接模式可解决;二是导入 SQL 文件因编码非 UTF-8 报错,改用在本地容器通过 pg_dump 带 --column-insert
实际场景中遇到的问题
我的数据库(supabase)一开始是通过本地docker部署的,使用的部署平台Railway后端无法访问本地的docker,需要一个公网Supabase。所以我决定创建一个云端Supabase项目,把数据库的数据迁移同步过去。
更多内容可参考之前写过的文章:AI编程适配|Supabase全解析(云服务+本地部署)+PostgreSQL高级特性实战
下面的流程仅梳理我在迁移过程中操作的流程和遇到的问题,请根据自身情况修改部分命令(比如项目ID不同),遇到报错可以让豆包修改,流程没有问题,最后成功迁移并且部署上线。
遇到的报错
先提前列出遇到的各种问题:
- 在导入本地数据到云端的时候遇到报错:
psql: error: connection to server at "db.xigjymmvhcpehszekxji.supabase.co" (198.18.0.148), port 6543 failed: server
closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
• Searched Supabase connection string pooler 6543 server closed connection unexpectedly db.<project>.supabase.co
198.18.0.148
这里的问题时解析到的IP不是Supabase真实公网IP,把VPN关了就可以了。
此外:复制URI的时候记得选择session pooler模式(IPv4 兼容):
Database(数据库) → Connect(连接) → 进入连接配置页面
在「Connect」页面中,找到 Method(连接方式)下拉框 → 选择 Session Pooler(或 Transaction Pooler):

检查 DNS 解析是否异常:
Resolve-DnsName db.xigjymmvhcpehszekxji.supabase.co
当显示的IPAddress不再是198开头的就可以了:

| 解析结果 | 说明 | 处理方式 |
|---|---|---|
| 输出 IP 是 34.xxx.xxx.xxx/54.xxx.xxx.xxx 等 AWS 网段 | DNS 解析正常(真实 IP) | 直接用复制的连接串执行 psql 命令即可 |
| 输出 IP 是 198.18.x.x/10.x.x.x 等内网 / Fake-IP | DNS 被代理 / 防火墙劫持 | 需在代理工具中把 *.supabase.co 设为「直连」,或关闭 Fake-IP 模式 |
| 提示 找不到此类主机 | 域名解析完全失败 | 检查代理是否全局开启,暂时关闭代理后重试 |
- 在最后一步将本地的sql数据文件导入到Supabase云端PostgreSQL的时候,文件编码格式不是 UTF-8(0xff 是 UTF-16 编码的 BOM 头),导致 psql 解析文件时出现编码错误:
遇到的问题:psql:/work/backup_public_data.sql:1: ERROR: invalid byte sequence for encoding “UTF8”: 0xff
解决方法:在本地运行的 supabase-db 容器中,用 pg_dump 导出 postgres 数据库 public 模式下的仅数据(无表结构),并以带列名的 INSERT 语句格式保存到容器内 /tmp 目录;
column-inserts 生成的 SQL 文件兼容性更高,导入时不易因列顺序 / 缺失导致报错
docker exec supabase-db sh -lc "pg_dump -U postgres -d postgres --data-only --schema=public --column-inserts > /tmp/backup_public_data.sql"; docker cp supabase-db:/tmp/backup_public_data.sql .\backup_public_data.sql

然后再执行:
docker run --rm --dns 223.5.5.5 -v "${PWD}:/work" postgres:15 psql "$DB_URL" -v ON_ERROR_STOP=1 -f "/work/backup_public_data.sql"
流程整理
把本地 Supabase 数据库的「业务数据」迁移到云端 Supabase 实例,全程基于 PowerShell 执行,核心逻辑是「导出本地数据 → 云端建表 → 导入数据」。
- 设置云端 Supabase 参数:
$PROJECT_REF = "<your-project-ref>"
$SUPABASE_URL = "https://$PROJECT_REF.supabase.co"
$SUPABASE_ANON_KEY = "<your-cloud-anon-key>"
$SUPABASE_SERVICE_ROLE_KEY = "<your-cloud-service-role-key>"
$DB_PASSWORD = "<your-cloud-db-password>"
- 找本地 Supabase DB 容器名(定位本地数据库):
docker ps --format "{{.Names}}" | Select-String "supabase_db|supabase-db"
$LOCAL_DB_CONTAINER = "supabase_db_supabase-project"
当你不确定具体是哪个容器的时候可以执行下面的命令查看表结构:
docker exec supabase-db psql -U postgres -d postgres -c "\dt public.*"

- 导入本地数据到云端(把本地数据同步到云端)
把 URI 赋值给 $DB_URL 变量
$DB_URL = "postgresql://postgres.xigjymmvhcpehszekxji:你的密码@aws-1-ap-southeast-2.pooler.supabase.com:5432/postgres?sslmode=require"
执行测试命令,验证连接有效性,输出正常则说明连接成功:显示当前时间:
docker run --rm postgres:15 psql "$DB_URL" -c "select now();"

如需备份本地数据库结构,执行以下命令:导出 public 模式的表结构(无数据)到 backup_public_schema.sql;导出 public 模式的仅数据(INSERT 语句格式)到 backup_public_data.sql:
docker exec $LOCAL_DB_CONTAINER pg_dump -U postgres -d postgres --schema-only --schema=public > .\backup_public_schema.sql; docker exec $LOCAL_DB_CONTAINER pg_dump -U postgres -d postgres --data-only --schema=public --column-inserts > .\backup_public_data.sql

执行迁移文件:定义 $DB_URL 后,后续的迁移 / 导入数据命令都可以直接用 $DB_URL:
$files = @("001_mvp_schema.sql","003_auth_profiles.sql","004_social_chat_schema.sql","005_location_geo.sql"); foreach ($f in $files) { docker run --rm -v "${PWD}:/work" postgres:15 psql "$DB_URL" -v ON_ERROR_STOP=1 -f "/work/backend/db/migrations/$f"; if ($LASTEXITCODE -ne 0) { throw "migrate failed: $f" } }

将本地 backup_public_data.sql 中的数据导入到 $DB_URL 指向的 Supabase 云端数据库:
docker run --rm --dns 223.5.5.5 -v "${PWD}:/work" postgres:15 psql "$DB_URL" -v ON_ERROR_STOP=1 -f "/work/backup_public_data.sql"


railway前后端分别部署的variables设置
前端的variables设置

后端的variables设置

更多推荐
所有评论(0)