我有一个由pg_dump导出的数据库,但现在当我尝试使用以下命令重新导入时:
psql -d databasename < mydump.sql
尝试向不存在的人授予角色失败。(错误信息显示“角色“xxx”不存在”)
有没有一种自动导入和设置所有角色到我的用户的方法?
我有一个由pg_dump导出的数据库,但现在当我尝试使用以下命令重新导入时:
psql -d databasename < mydump.sql
尝试向不存在的人授予角色失败。(错误信息显示“角色“xxx”不存在”)
有没有一种自动导入和设置所有角色到我的用户的方法?
--no-owner
添加到pg_restore
命令中。与当前已接受的答案不同,该命令应该使用当前用户创建每个对象,即使转储中的角色在数据库中不存在。使用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
这是关于it技术的内容,其中包含了有关pgrestore的信息。请点击上述链接以获取详细信息。pg_dumpall -g > globals.sql
我使用了以下内容:
pg_dump --no-privileges --no-owner $OLD_DB_URL | psql $NEW_DB_URL
来自
https://www.postgresql.org/docs/12/app-pgdump.html
-O
--no-owner
不生成设置对象所有权以匹配原始数据库的命令。默认情况下,pg_dump会发出ALTER OWNER或SET SESSION AUTHORIZATION语句来设置创建的数据库对象的所有权。除非由超级用户(或拥有脚本中所有对象的同一用户)启动脚本,否则这些语句将在运行脚本时失败。为了使脚本可以被任何用户恢复,但是将其所有对象的所有权都赋予那个用户,请指定-O。
此选项仅对纯文本格式有意义。对于存档格式,您可以在调用pg_restore时指定该选项。
-x
--no-privileges
--no-acl
防止转储访问权限(授予/撤销命令)。
cat my-import-file.sql | awk '!/old-role/' | psql -U target_owner -d target_db_name -1 -v ON_ERROR_STOP=1
my-import-file.sql
target_owner
target_db_name
old-role
如果你有多个角色:
cat my-import-file.sql | awk '!/role1|role2|role3/' | psql -U target_owner -d target_db_name -1 -v ON_ERROR_STOP=1
你可以创建一个与缺失角色同名的新角色,然后导入转储文件,这样就不会出现错误了。
错误提示说“角色 'xxx' 不存在” - 所以创建它即可 :)