PostgreSQL LinuxWindowsсервер PostgreSQL

PostgreSQL: После восстановления pg_dump отсутствуют нужные роли

  • Обновлено
  • Чтение ≈ 2 минуты
  • Нужны права администратора

Краткий ответ

Восстановленная через pg_dump база содержит объекты, но роли-владельцы и GRANT отсутствуют: pg_dump сохраняет одну базу, а роли являются глобальными объектами кластера. Для полного переноса ролей используют отдельное сохранение глобальных объектов.

В этой статье
  1. Симптом и границы применимости
  2. Как отличить возможные причины
  3. Пошаговая диагностика и безопасное исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Симптом и границы применимости

Восстановленная через pg_dump база содержит объекты, но роли-владельцы и GRANT отсутствуют: pg_dump сохраняет одну базу, а роли являются глобальными объектами кластера. Для полного переноса ролей используют отдельное сохранение глобальных объектов.

#Как отличить возможные причины

Возможная причинаКак узнатьЧто делать
Роли не входят в дамп базыpg_dump не создаёт роли на целевом сервере.role ... does not exist при restoreСохранить globals
Роль названа иначеНа новом кластере создан другой пользователь.Объекты принадлежат неверному владельцуСопоставить имена и права
Роль уже существуетСкрипт восстановления globals конфликтует с существующим кластером.role already existsРучное согласование

#Пошаговая диагностика и безопасное исправление

  1. 1. Убедитесь, что проблема именно в роляхОткройте журнал pg_restore/psql и найдите role does not exist, owner, ACL. Сохраните имена ролей; не запускайте скрипт повторно целиком на рабочем кластере.
  1. 2. Сравните роли источника и назначенияВ psql на обоих кластерах прочитайте список ролей, не выгружая пароли. Сопоставьте права LOGIN, членство и владельцев данных.
  2. Мета-команда psql; чтение перечня ролей
    ТекстКоманда
    Мета-команда psql; чтение перечня ролей.
    \du
  1. 3. Сохраните глобальные объекты с исходного кластераОт администратора исходного PostgreSQL выполните pg_dumpall --globals-only в защищённый каталог с ограничением доступа. В дампе могут оказаться чувствительные настройки ролей, включая хеши паролей.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал хоста источника, привилегированный пользователь БД; globals.sql хранить защищённо и не публиковать.
    pg_dumpall --globals-only -f globals.sql

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 4. Просмотрите скрипт перед восстановлениемОткройте globals.sql текстовым редактором и составьте сопоставление старых и новых ролей. Параметры tablespace могут содержать локальные пути, а CREATE ROLE — конфликтовать с существующей ролью.
  1. 5. Испытайте восстановление в чистом тестовом кластереСначала создайте нужные роли и убедитесь в безопасной совместимости политик паролей, затем восстанавливайте дамп базы. На общем кластере выполнение полного globals.sql без проверки недопустимо.
  1. 6. Выберите способ сопоставления владельцевЕсли цель — одна сервисная роль, допустим сознательный перенос с pg_restore --no-owner и назначение прав после восстановления; это не замена всех ролей, когда есть RLS, SECURITY DEFINER и разные владельцы.
  1. 7. Проверьте эффективные разрешения из приложенияСоздайте новое тестовое подключение с ролью приложения; выполните SELECT LIMIT 1 и контрольную запись в отдельную тестовую таблицу. Сверьте владельцев и GRANT, затем документируйте план для рабочего кластера.

#Как проверить, что проблема устранена

В тесте восстановлены ожидаемые роли и членства; подключение приложения работает с минимальными правами, ошибок роли при восстановлении нет.

#Если исправление не помогло

Если исходный кластер утрачен и globals.sql отсутствует, восстановить неизвестные роли автоматически нельзя. Восстановите их имена и минимальные права из документации приложения.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.