Импорт базы данных postgres без ролей

У меня есть база данных, которая была экспортирована с pg_dump, но теперь, когда я пытаюсь импортировать ее снова с:

psql -d databasename < mydump.sql

он не пытается предоставить роли людям, которые не существуют. (ошибка говорит, что "роль" xxx "не существует")

есть ли способ импортировать и установить все роли автоматически для моего пользователя?

5 ответов


поведение импорта по умолчанию заключается в том, что он заменяет все роли, которые он не знает, ролью, с которой вы выполняете импорт. Поэтому в зависимости от того, для чего вам нужна база данных, вы можете просто импортировать ее и игнорировать сообщения об ошибках.

цитата из http://www.postgresql.org/docs/9.2/static/backup-dump.html#BACKUP-DUMP-RESTORE

перед восстановлением дампа SQL, все пользователи, которые владеют объектами или были предоставлены разрешения на объекты в базе данных dumped должны уже существовать. Если это не так, восстановление не сможет воссоздать объекты с исходными правами собственности и / или разрешениями. (Иногда это то, чего вы хотите, но обычно это не так.)


ответ, который вы могли бы искать добавляет --no-owner до


С 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


Да, вы можете сбросить все "глобальные" объекты из исходной БД с помощью опции pg_dumpall'S-g:

pg_dumpall -g  > globals.sql

затем запустите globals.sql против вашей целевой БД перед импортом.


Ну, вы можете просто создать новую роль с тем же именем, что и у вас отсутствует, а затем импортировать дамп без ошибок.

ошибка говорит, что "роль" xxx "не существует" - поэтому создайте ее:)