#postgresql
#postgresql
Вопрос:
Я импортирую базу данных с:
sudo -u postgres psql mydb < mydb.bak
И я получаю следующую ошибку в консоли много раз:
ОШИБКА: роль «foo» не существует
Мне интересно, что происходит в таком случае. Использует ли он другого пользователя, и если да, то какого? Владелец базы данных или, может быть, просто postgres?
Комментарии:
1. Используйте
-U
опциюpsql
, чтобы указать желаемого пользователя базы данных.2. @LaurenzAlbe Я получаю
FATAL: Peer authentication failed for user "dev"
при использованииsudo -u postgres psql -U dev mydb < mydb.bak
3. Затем измените
pg_hba.conf
соответствующим образом и перезагрузите.4. если вы разрешаете вход в систему без одноранговых узлов
pg_hba.conf
(например, с помощью пароля). тогда вам вообще не нужен sudo, и вы можете использоватьpsql -U dev mydb
напрямую
Ответ №1:
Я собираюсь предположить, что ваше сообщение mydb.bak
поступает из другого кластера / экземпляра Postgres, где есть роль foo
. Я также собираюсь предположить, что у кластера, в который вы импортируете, нет этой роли. В этом случае у вас могут быть объекты с привилегиями, назначенными роли foo
, и нет такой роли в новой базе данных. Затем вы получаете ошибки, которые вы видите. Если это так, то вам нужно будет либо добавить ее вручную в новый кластер / экземпляр, либо использовать pg_dumpall -g
в другом экземпляре для получения глобальных объектов, которые включают роли. Имейте в виду, что это будет включать все глобальные значения, поэтому вы можете этого не захотеть.