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

How to use pg_dump correctly to replicate my local database to a remote server

我正在努力尝试将我的本地 postgres 数据库移动到我的 Digital Ocean 集群。我想让我的新远程服务器成为我的主要 DB,因此传递所有角色和权限。我阅读了 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,但我一直 运行 陷入同样的​​错误。如何迁移我的所有 DB,包括角色和权限,克服上述错误?

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