首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入不带角色的postgres数据库

问导入不带角色的postgres数据库
EN

Stack Overflow用户
提问于 2013-06-18 01:06:34
回答 7查看 42.7K关注 0票数 50

我有一个用pg_dump导出的数据库,但现在当我尝试用以下命令再次导入它时:

代码语言:javascript
复制
psql -d databasename < mydump.sql

它尝试将角色授予不存在的人时会失败。(错误显示‘角色"xxx“不存在”)

有没有办法将所有角色自动导入并设置给我的用户?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-06-18 01:22:09

导入的默认行为是将它不知道的所有角色替换为您用来执行导入的角色。因此,根据您需要数据库的用途,您可能只需导入它并忽略错误消息即可。

引用http://www.postgresql.org/docs/9.2/static/backup-dump.html#BACKUP-DUMP-RESTORE

在还原SQL转储之前,在转储的数据库中拥有对象或被授予对象权限的所有用户必须已经存在。否则,还原将无法重新创建具有原始所有权和/或权限的对象。(有时这是您想要的,但通常不是。)

票数 49
EN

Stack Overflow用户

发布于 2016-06-21 02:59:25

您可能正在寻找的答案是在pg_restore命令中添加--no-owner。与目前公认的答案不同,即使转储中的角色在数据库中不存在,该命令也应该使用当前用户创建每个对象。

因此,pg_restore不会跳过任何元素,但是如果导入的某些元素属于不同的用户,那么据我所知,所有记录现在都只属于一个用户。

票数 34
EN

Stack Overflow用户

发布于 2013-06-18 01:45:12

使用pg_restore,您可以使用--role=rolename选项强制使用角色名称来执行恢复。但是转储必须是非纯文本格式。

例如,您可以使用以下命令进行转储:

代码语言:javascript
复制
pg_dump -F c -Z 9 -f my_file.backup my_database_name

然后您可以使用以下命令来恢复它:

代码语言:javascript
复制
pg_restore -d my_database_name --role=my_role_name my_file.backup

有关更多信息,请访问:http://www.postgresql.org/docs/9.2/static/app-pgrestore.html

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17153008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档