Как сменить владельца базы данных PostgreSql?

205

Мне нужно изменить владельца базы данных PostgreSql.

Как сменить владельца базы данных PostgreSql в phppgadmin?

Jayashri
источник

Ответы:

345
ALTER DATABASE name OWNER TO new_owner;

Смотрите подробности в руководстве к Postgresql .

Фрэнк Хейкенс
источник
3
Для полноты здесь часть руководства, которая документирует это: postgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name
17
@ mArtinko5MB: это невозможно, ALTER не удаляет базу данных.
Фрэнк Хайкенс,
17
@ mArtinko5MB: Также невозможно, ALTER TABLE не удаляет таблицу. Покажите нам ваш SQL, что-то сильно сломано в ваших утверждениях.
Фрэнк Хайкенс,
18
Обратите внимание, что все таблицы и последовательности внутри базы данных будут по-прежнему назначаться первоначальному владельцу.
Церин
2
ERROR: must be member of role ...= НЕ
РАБОТАЕТ
49

Ответ Фрэнка Хайкенса будет только обновлять базу данных владельцев. Часто вы также хотите обновить владельца принадлежащих объектов (включая таблицы). Начиная с Postgres 8.2, REASSIGN OWNED доступен для упрощения этой задачи.

ВАЖНОЕ РЕДАКТИРОВАНИЕ!

Никогда не используйте, REASSIGN OWNEDкогда исходная роль postgres, это может повредить весь экземпляр БД. Команда обновит все объекты с новым владельцем, включая системные ресурсы (postgres0, postgres1 и т. Д.)


Сначала подключитесь к базе данных администратора и обновите владение БД:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Это глобальный эквивалент ALTER DATABASEкоманды, представленной в ответе Фрэнка, но вместо обновления конкретной БД он меняет владельца всех БД, принадлежащих 'old_name'.

Следующим шагом является обновление владения таблицами для каждой базы данных:

psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;

Это должно быть выполнено на каждой базе данных, принадлежащей 'old_name'. Команда обновит владение всеми таблицами в БД.

Antwane
источник
7
Ницца! ... если не владелец postgres, сам ... Узнал, что трудный путь.
Крис
1
Проблема заключается в том, что он не меняет владельца одной базы данных, но везде заменяет владельца новой.
Michael003
Приведенный выше REASSIGN OWNED собирается заменить всю базу данных (если имеется несколько баз данных) в одном и том же экземпляре на новую роль.
varun7447
Для альтернативы REASSIGN OWNED(обычно потому, что ваш владелец postgres), посмотрите фрагменты в stackoverflow.com/a/2686185/1839209 .
Майкл Херрманн