¿Cómo cambiar el propietario de la base de datos PostgreSql?

205

Necesito cambiar el propietario de la base de datos PostgreSql.

¿Cómo cambiar el propietario de la base de datos PostgreSql en phppgadmin?

Jayashri
fuente

Respuestas:

345
ALTER DATABASE name OWNER TO new_owner;

Vea la entrada del manual Postgresql sobre esto para más detalles.

Frank Heikens
fuente
3
Para completar, aquí está la parte del manual que documenta esto: postgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name
17
@ mArtinko5MB: Eso es imposible, ALTER no CAE una base de datos.
Frank Heikens
17
@ mArtinko5MB: También imposible, ALTER TABLE no DROP la tabla. Muéstranos tu SQL, algo está mal roto en tus declaraciones.
Frank Heikens
18
Tenga en cuenta que todas las tablas y secuencias dentro de la base de datos aún se asignarán al propietario original.
Cerin
2
ERROR: must be member of role ...= NO FUNCIONA CON RDS
StartupGuy
49

La respuesta de Frank Heikens solo actualizará la propiedad de la base de datos. A menudo, también desea actualizar la propiedad de los objetos contenidos (incluidas las tablas). Comenzando con Postgres 8.2, REASSIGN OWNED está disponible para simplificar esta tarea.

¡EDICIÓN IMPORTANTE!

Nunca use REASSIGN OWNEDcuando el rol original es postgres, esto podría dañar toda su instancia de base de datos. El comando actualizará todos los objetos con un nuevo propietario, incluidos los recursos del sistema (postgres0, postgres1, etc.)


Primero, conéctese a la base de datos de administración y actualice la propiedad de la base de datos:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Este es un equivalente global del ALTER DATABASEcomando proporcionado en la respuesta de Frank, pero en lugar de actualizar un DB en particular, cambia la propiedad de todos los DB propiedad de 'old_name'.

El siguiente paso es actualizar la propiedad de las tablas para cada base de datos:

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

Esto debe realizarse en cada base de datos propiedad de 'old_name'. El comando actualizará la propiedad de todas las tablas en la base de datos.

Antwane
fuente
77
¡Agradable! ... a menos que el dueño sea postgresél mismo ... Aprendí eso por las malas.
Chris
1
El problema es que no cambia el propietario de una sola base de datos, sino que reemplaza al propietario en todas partes por la nueva.
Michael003
El REASSIGN OWNED anterior cambiará toda la base de datos (si hay varias bases de datos) en una misma instancia a la nueva función.
varun7447
Para una alternativa a REASSIGN OWNED(generalmente porque su propietario es postgres), consulte los fragmentos en stackoverflow.com/a/2686185/1839209 .
Michael Herrmann