我有一个用pg_dump导出的数据库,但现在当我尝试用以下命令再次导入它时:
psql -d databasename < mydump.sql它尝试将角色授予不存在的人时会失败。(错误显示‘角色"xxx“不存在”)
有没有办法将所有角色自动导入并设置给我的用户?
发布于 2013-06-18 01:22:09
导入的默认行为是将它不知道的所有角色替换为您用来执行导入的角色。因此,根据您需要数据库的用途,您可能只需导入它并忽略错误消息即可。
引用http://www.postgresql.org/docs/9.2/static/backup-dump.html#BACKUP-DUMP-RESTORE
在还原SQL转储之前,在转储的数据库中拥有对象或被授予对象权限的所有用户必须已经存在。否则,还原将无法重新创建具有原始所有权和/或权限的对象。(有时这是您想要的,但通常不是。)
发布于 2016-06-21 02:59:25
您可能正在寻找的答案是在pg_restore命令中添加--no-owner。与目前公认的答案不同,即使转储中的角色在数据库中不存在,该命令也应该使用当前用户创建每个对象。
因此,pg_restore不会跳过任何元素,但是如果导入的某些元素属于不同的用户,那么据我所知,所有记录现在都只属于一个用户。
发布于 2013-06-18 01:45:12
使用pg_restore,您可以使用--role=rolename选项强制使用角色名称来执行恢复。但是转储必须是非纯文本格式。
例如,您可以使用以下命令进行转储:
pg_dump -F c -Z 9 -f my_file.backup my_database_name然后您可以使用以下命令来恢复它:
pg_restore -d my_database_name --role=my_role_name my_file.backup有关更多信息,请访问:http://www.postgresql.org/docs/9.2/static/app-pgrestore.html
https://stackoverflow.com/questions/17153008
复制相似问题