我想从PostgreSQL中导出所有内容(用户,角色,对象定义,数据)并将其还原到另一台服务器。我怎么能这样做?
我尝试使用
pg_dumpall -U postgres -g > out.sql
但文件 out.sql 为空。有人可以解释一下为什么会这样吗?
当我尝试:
pg_dumpall -U postgres > out.sql
PostgreSQL只是不想接受" postgres"的密码。
我更喜欢从(windows)命令行完成这项工作(这不是问题,使用linux命令,我可以翻译它们)。如果有很好的pgAdmin方法,我也很乐意学习它。
更新:我尝试的用户不同于" postgres"(在这种情况下 rsmn ):
pg_dumpall -U rsmn > out.sql
我有以下错误:
pg_dumpall:查询失败:错误:关系的权限被拒绝 pg_authid pg_dumpall:查询是:SELECT oid,rolname,rolsuper, rolinherit,rolcreaterole,rolcreatedb,rolcanlogin,rolconnlimit, rolpassword,rolvalidunil,rolreplication,rolbypassrls, pg_catalog.shobj_description(oid,' pg_authid')作为rolcomment,rolname = current_user as is_current_user FROM pg_authid WHERE rolname!〜' ^ pg _'订购2
答案 0 :(得分:0)
如果您尝试在* nix下执行此操作并且您的服务器已安装在当地,则您可能不会使用ident
模式而不是password
:
sudo su postgres
pg_dumpall > out.sql
答案 1 :(得分:0)
用户rsmn
的尝试失败,因为它不是超级用户,无法导出用户密码。
仍然要弄清楚为什么pg_dumpall -U postgres
失败了。
为此,首先要检查PostgreSQL服务器日志。我不确定您系统的位置,您应该检查postgresql.conf
(logging_collector
,log_destination
,log_directory
,log_filename
)中的设置。可能它在Windows事件日志中。
日志消息会告诉您出了什么问题。
这可能是pg_hba.conf
文件的问题 - 如果是这样,现代的PostgreSQL版本会告诉你使用了哪一行。
出于调试目的,您可以尝试将相关行更改为trust
身份验证,以便不要求密码(但不要这样做,或者每个人都可以作为用户postgres
连接密码!)。