Импорт базы данных 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 должны уже существовать. Если это не так, восстановление не сможет воссоздать объекты с исходными правами собственности и / или разрешениями. (Иногда это то, чего вы хотите, но обычно это не так.)
С 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 "не существует" - поэтому создайте ее:)