Como mudar o proprietário do banco de dados PostgreSql?

205

Eu preciso alterar o proprietário do banco de dados PostgreSql.

Como alterar o proprietário do banco de dados PostgreSql no phppgadmin?

Jayashri
fonte

Respostas:

345
ALTER DATABASE name OWNER TO new_owner;

Veja a entrada do manual do Postgresql sobre isso para mais detalhes.

Frank Heikens
fonte
3
Para completar aqui é a parte do manual que documenta esta: postgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name
17
@ mArtinko5MB: Isso é impossível, ALTER não derruba um banco de dados.
precisa
17
@ mArtinko5MB: Também impossível, ALTER TABLE não derruba a tabela. Nos mostre seu SQL, algo está gravemente quebrado em suas declarações.
precisa
18
Observe que todas as tabelas e seqüências dentro do banco de dados ainda serão atribuídas ao proprietário original.
Cerin
2
ERROR: must be member of role ...= Não funciona com RDS
StartupGuy
49

A resposta de Frank Heikens atualizará apenas a propriedade do banco de dados. Freqüentemente, você também deseja atualizar a propriedade de objetos contidos (incluindo tabelas). Começando com o Postgres 8.2, REASSIGN POSSUÍDO está disponível para simplificar esta tarefa.

EDIÇÃO IMPORTANTE!

Nunca use REASSIGN OWNEDquando a função original estiver postgres, pois isso pode danificar toda a instância do banco de dados. O comando atualizará todos os objetos com um novo proprietário, incluindo recursos do sistema (postgres0, postgres1, etc.)


Primeiro, conecte-se ao banco de dados do administrador e atualize a propriedade do banco de dados:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Este é um equivalente global do ALTER DATABASEcomando fornecido na resposta de Frank, mas, em vez de atualizar um banco de dados específico, ele altera a propriedade de todos os bancos de dados pertencentes a 'old_name'.

A próxima etapa é atualizar a propriedade das tabelas para cada banco de dados:

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

Isso deve ser realizado em cada banco de dados pertencente a 'old_name'. O comando atualizará a propriedade de todas as tabelas no banco de dados.

Antwane
fonte
7
Agradável! ... a menos que o dono seja postgresele mesmo ... Aprendeu isso da maneira mais difícil.
18718 Chris
1
O problema é que ele não altera o proprietário de um único banco de dados, mas substitui o proprietário em todos os lugares pelo novo.
Michael003
O REASSIGN OWNED acima mudará todo o banco de dados (se houver vários bancos de dados) em uma mesma instância para a nova função.
varun7447 9/03
Para uma alternativa a REASSIGN OWNED(normalmente porque o seu proprietário é postgres), consulte os trechos em stackoverflow.com/a/2686185/1839209 .
Michael Herrmann