如何正确使用 pg_dump 将我的本地数据库复制到远程服务器

Posted

技术标签:

【中文标题】如何正确使用 pg_dump 将我的本地数据库复制到远程服务器【英文标题】:How to use pg_dump correctly to replicate my local database to a remote server 【发布时间】:2021-02-20 06:26:21 【问题描述】:

我正在努力尝试将我的本地 postgres 数据库移动到我的 Digital Ocean 集群。我想让我的新远程服务器成为我的主要分贝,因此传递所有角色和权限。我阅读了pg_dump 文档,但仍然不知道如何解决我的问题。以下是我的命令:

创建转储文件:

pg_dump -U postgres --no-owner sb > dump_file  

从 DO 连接到远程服务器并移动 dB:

pg_restore -d MY_URI_CONNECTION dump_file

创建了数据、架构和表,但没有创建角色,这会在我的终端中引发错误:

ERROR:  role "admin" does not exist
ERROR:  role "admin" does not exist
ERROR:  role "web_anon" does not exist
WARNING:  no privileges could be revoked for "public"
REVOKE
WARNING:  no privileges were granted for "public"
GRANT
ERROR:  role "web_anon" does not exist
ERROR:  role "web_anon" does not exist
ERROR:  role "web_anon" does not exist
ERROR:  role "web_anon" does not exist
ERROR:  role "web_anon" does not exist
ERROR:  must be member of role "postgres"
ERROR:  role "USER" does not exist

我尝试了多种方法来迁移我的 dB,但我一直遇到同样的错误。如何迁移我的所有分贝,包括角色和权限,克服我上面的错误?

【问题讨论】:

【参考方案1】:

使用pg_dumpall -g > globals_file.sql。见这里pg_dumpall。这将为您提供所有全局变量(包括角色)的纯文本文件。首先使用psql -d db -U superuser -f globals_file.sql 恢复到新集群请注意,这将转储给定集群中的所有角色。

【讨论】:

嗨阿德里安,当我尝试恢复全局文件时,我看到一些角色是SETCREATED,我无法使用超级用户,因为数字海洋不支持它? digitalocean.com/community/questions/… 还有另一个不使用托管产品的原因。除了说使用不会抑制您选择的产品之外,无法帮助您。我个人使用 Linode 和一个我可以完全控制的虚拟机。

以上是关于如何正确使用 pg_dump 将我的本地数据库复制到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 pg_dump 将 Postgres 从 Windows 迁移到 Linux 时如何选择正确的排序规则来创建数据库?

我如何将本地 PostgreSQL 数据库复制到 Heroku for Spring Boot 应用程序

如何将我的十六进制字符串转换为数字? [复制]

如何正确连接我的 servlet 和我的帖子表单? [复制]

如何将我的 Android Studio 项目导出为 APK 文件? [复制]

如何更新 Elastic Beanstalk 上的 pg_dump