Подтвердить что ты не робот

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

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

psql -d databasename < mydump.sql

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Ответ, который вы, возможно, ищете, добавляет команду --no-owner в команду pg_restore. В отличие от принятого ответа на данный момент, команда должна создавать каждый объект с текущим пользователем, даже если роль в дампе не существует в базе данных.

Таким образом, ни один элемент не будет пропущен pg_restore, но если некоторые импортированные элементы принадлежат другим пользователям, все записи теперь будут принадлежать только одному пользователю, насколько я могу судить.

Ответ 3

С помощью 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

Ответ 4

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

pg_dumpall -g  > globals.sql

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

Ответ 5

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

error говорит: "Роль" xxx "не существует" - создайте его:)