postgresql: як я скидаю та відновлюю ролі для кластера?


27

Де зберігаються ролі в кластері, і як я їх скидаю?

Я зробив pg_dump db і потім завантажив його в інший кластер, але я отримую багато цих помилок:

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

Тож, мабуть, дамп мого db не включає ролі. Я спробував скинути db '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заяви.


Чи можете ви додати, як відновити всі ролі (тобто фільтрація не потрібна)?
Етан Фурман

1
щоб відновити всі ролі, просто скопіюйте та вставте результат pg_dumpall --roles-onlyу потрібну оболонку psql. Або конкретні CREATE ROLEта ALTER ROLEрядки
Фернандо Фабреті
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.