在Ubuntu上进行PostgreSQL数据迁移,常用方法包括使用命令行工具和图形化工具,以下是具体步骤及注意事项:
一、命令行工具迁移
1. 使用 pg_dump 和 pg_restore(推荐)
-
导出数据
pg_dump -U 用户名 -h 主机地址 -p 端口 -F c -b -v -f /路径/备份文件.dump 数据库名-F c:自定义格式(支持压缩和并行恢复)。-b:包含大对象(如二进制数据)。- 示例:
pg_dump -U postgres -h localhost -p 5432 -F c -b -v -f /backup/db.dump mydb。
-
导入数据
pg_restore -U 用户名 -h 主机地址 -d 目标数据库名 -v /路径/备份文件.dump- 若目标数据库不存在,可加
-C参数自动创建。 - 示例:
pg_restore -U postgres -d newdb -v /backup/db.dump。
- 若目标数据库不存在,可加
2. 使用 psql 导入SQL脚本
-
导出为SQL文件
pg_dump -U 用户名 -h 主机地址 -p 端口 -F p -b -v -f /路径/备份文件.sql 数据库名-F p:生成纯文本SQL脚本。
-
导入SQL文件
psql -U 用户名 -h 主机地址 -d 目标数据库名 -f /路径/备份文件.sql- 需提前创建目标数据库。
3. 使用 COPY 命令(适合单表或结构化数据)
- 导出表数据到CSV
COPY 表名 TO '/路径/文件.csv' WITH CSV HEADER; - 导入CSV数据到表
COPY 表名 FROM '/路径/文件.csv' WITH CSV HEADER;- 需确保目标表结构已存在。
二、图形化工具迁移(pgAdmin)
- 导出数据库
- 连接源数据库 → 右键选择“Backup…” → 选择格式(SQL/自定义)→ 指定路径 → 点击“Backup”。
- 导入数据库
- 连接目标数据库 → 右键选择“Restore…” → 选择备份文件 → 配置选项(如覆盖、并行恢复)→ 点击“Restore”。
三、注意事项
- 权限与版本
- 确保源和目标服务器的PostgreSQL版本兼容,且用户有足够权限(如创建数据库、访问表)。
- 数据一致性
- 迁移前建议对源数据库进行备份,避免数据丢失。
- 大数据量迁移时,使用
pg_restore -j并行恢复或分阶段处理。
- 特殊场景
- 跨服务器迁移需确保网络连通,可通过SSH隧道或直接文件传输(如
scp)。 - 若需迁移部分数据,可使用
pg_dump的-t参数指定表名。
- 跨服务器迁移需确保网络连通,可通过SSH隧道或直接文件传输(如
四、参考命令速查表
| 场景 | 命令示例 |
|---|---|
| 备份整个数据库 | pg_dump -U postgres -h localhost -F c -b -v -f /backup/db.dump mydb |
| 恢复整个数据库 | pg_restore -U postgres -d newdb -v /backup/db.dump |
| 备份单表 | pg_dump -U postgres -h localhost -t users -F c -b -v -f /backup/users.dump mydb |
| 从SQL文件导入 | psql -U postgres -d newdb -f /backup/schema.sql |
更多细节可参考官方文档:PostgreSQL pg_dump/pg_restore。