postgresql: как создать дамп и восстановить роли для кластера?

27

Где хранятся роли в кластере и как их записать?

Я сделал pg_dump базы данных, а затем загрузил его в другой кластер, но я получаю много этих ошибок:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

Так что, видимо, дамп моей БД не включает роли. Я попытался сбросить базу данных postgres, но я не вижу там и роли.

Нужно ли использовать pg_dumpall --roles-only?

Postgresql версии 8.4.8 и 9.1.4 ОС: Ubuntu 11.04 Natty

Роб Беднарк
источник

Ответы:

37

Из CREATE ROLEдокументации :

Обратите внимание, что роли определены на уровне кластера базы данных и поэтому действительны во всех базах данных в кластере.

Так как pg_dumpдамп единственной базы данных, вы не можете извлечь роли с этой утилитой. Предложенная pg_dumpall --roles-onlyвами команда выполнит эту работу, однако вам может потребоваться отфильтровать ее выходные данные, чтобы в новом кластере были созданы только нужные роли.

Роли хранятся в pg_authidкаталоге, который физически хранится в data/global/подпапке установки PostgreSQL, вместе с другими таблицами кластера. Вы можете запросить содержимое pg_authidчерез pg_rolesпредставление.

ПРИМЕЧАНИЕ : вам понадобятся права суперпользователя для снятия ролей. В противном случае, вы получите разрешение на Отказано SELECTна pg_authid- и даже тогда , когда суперпользователь предоставляет SELECTправа, вы получите ту же ошибку. В этом случае, однако, вы можете составить список ролей, pg_authidнапрямую запросив COPYего в файле, и применить некоторую магию для создания необходимых операторов CREATE ROLEи ALTER ROLEоператоров.

Dezso
источник
Можете ли вы добавить, как восстановить все роли (то есть фильтрация не требуется)?
Итан Фурман
1
чтобы восстановить все роли, просто скопируйте и вставьте вывод pg_dumpall --roles-onlyв желаемую оболочку psql. Или конкретные CREATE ROLEи ALTER ROLEлинии
Фернандо Фабрети