Что происходит при получении ОШИБКИ: роль «foo» не существует в psql?

#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 в другом экземпляре для получения глобальных объектов, которые включают роли. Имейте в виду, что это будет включать все глобальные значения, поэтому вы можете этого не захотеть.