我想从我的 PostgreSQL 导出所有内容(用户、角色、对象定义、数据)并将其恢复到另一台服务器。我该怎么做?
我尝试使用
pg_dumpall -U postgres -g > out.sql
但是文件 out.sql 是空的。谁能解释一下为什么会这样?
当我尝试时:
pg_dumpall -U postgres > out.sql
PostgreSQL 只是不想接受“postgres”的密码。
我更喜欢从 (windows) 命令行完成这项工作(这不是问题,使用 linux 命令,我可以翻译它们)。如果有好的 pgAdmin 方法可以做到这一点,我也很乐意学习。
P.S: 我的“postgres”密码是正确的(我尝试用“psql -U postgres”登录,没有问题)
更新:我尝试使用不同于“postgres”的用户(在本例中为 rsmn):
pg_dumpall -U rsmn > out.sql
我有以下错误:
pg_dumpall: query failed: ERROR: permission dneied for relation pg_authid pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvalidunil, rolreplication, rolbypassrls, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user as is_current_user FROM pg_authid WHERE rolname !~ '^pg_' ORDER BY 2
最佳答案
对用户 rsmn
的尝试失败,因为它不是 super 用户并且无法导出用户密码。
还有待弄清楚为什么 pg_dumpall -U postgres
对你失败。
为此,第一件事就是检查 PostgreSQL 服务器日志。我不确定它在你的系统上的什么位置,你应该检查 postgresql.conf
中的设置(logging_collector
、log_destination
、log_directory
,日志文件名
)。可能它在 Windows 事件日志中。
日志消息会告诉你哪里出了问题。
这很可能是 pg_hba.conf
文件的问题——如果是这样,现代 PostgreSQL 版本会告诉您使用了哪一行。
出于调试目的,您可以尝试将相关行更改为 trust
身份验证,这样就不需要密码(但不要这样,否则每个人都可以作为用户 连接postgres
没有密码!)。
关于postgresql - 从 PostgreSQL 导出所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738437/