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


205

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

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

Ответы:


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'. Команда обновит владение всеми таблицами в БД.


7
Ницца! ... если не владелец postgres, сам ... Узнал, что трудный путь.
Крис

1
Проблема заключается в том, что он не меняет владельца одной базы данных, но везде заменяет владельца новой.
Michael003

Приведенный выше REASSIGN OWNED собирается заменить всю базу данных (если имеется несколько баз данных) в одном и том же экземпляре на новую роль.
varun7447

Для альтернативы REASSIGN OWNED(обычно потому, что ваш владелец postgres), посмотрите фрагменты в stackoverflow.com/a/2686185/1839209 .
Майкл Херрманн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.