PostgreSQL复制远程数据库到另一服务器遇不存在报错如何解决
PostgreSQL pg_dump 报错数据库不存在的解决方案
首先明确你收到的报错:
pg_dump: error: connection to database [DB] failed: FATAL: database [DB] does not exist
该报错的本质是你当前pg_dump命令连接的PostgreSQL实例下,不存在你指定的数据库,和pg_hba.conf配置无关(pg_hba.conf管控的是连接权限,异常报错通常为身份校验失败、无访问权限类提示),你之前修改该配置属于排查方向错误。
排查与解决步骤
1. 确认你要导出的数据库真实存在
登录到你要导出的源数据库实例,执行以下命令列出所有数据库,确认目标库名拼写、大小写完全匹配:
psql -U postgres -h [源数据库所在服务器的IP/域名] -l
注意两个常见误区:
- 第一条命令
pg_dump -U postgres -d [DB] -f [DB].sql没有加-h参数,默认连接的是你本地mac上运行的PostgreSQL实例,不是远程源服务器的实例,本地没有对应库就会直接报错 - PostgreSQL的数据库名区分大小写,如果你建库时用了大写字母,执行命令时需要给库名加双引号包裹,比如
-d "UserDB"
2. 编写正确的导出命令
从远程源服务器导出数据库到本地的标准命令格式如下,按需替换参数即可:
pg_dump -U [源数据库用户名] -h [源服务器IP/域名] -p [源PostgreSQL端口,默认5432] -d [源数据库名] -f [导出文件保存路径].sql
执行后输入源数据库对应用户的密码即可完成导出。
3. 跨服务器直接迁移(可选,无需生成本地文件)
如果要直接把源库数据同步到目标远程服务器,不用存本地SQL文件,可以用管道命令一步完成:
pg_dump -U [源端用户名] -h [源端主机地址] -d [源端数据库名] | psql -U [目标端用户名] -h [目标端主机地址] -d [目标端数据库名]
注意需要提前在目标端创建好同名空数据库,否则导入步骤会报错。
内容的提问来源于stack exchange,提问作者Ewax_Du
相关产品推荐
相关产品推荐

