Comment changer le propriétaire de la base de données PostgreSql?

205

Je dois changer le propriétaire de la base de données PostgreSql.

Comment changer le propriétaire de la base de données PostgreSql dans phppgadmin?

Jayashri
la source

Réponses:

345
ALTER DATABASE name OWNER TO new_owner;

Voir l'entrée du manuel Postgresql à ce sujet pour plus de détails.

Frank Heikens
la source
3
Pour être complet, voici la partie du manuel qui documente ceci: postgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name
17
@ mArtinko5MB: C'est impossible, ALTER ne supprime pas une base de données.
Frank Heikens
17
@ mArtinko5MB: Également impossible, ALTER TABLE ne supprime pas la table. Montrez-nous votre SQL, quelque chose est mal cassé dans vos relevés.
Frank Heikens
18
Notez que toutes les tables et séquences de la base de données seront toujours attribuées au propriétaire d'origine.
Cerin
2
ERROR: must be member of role ...= NE FONCTIONNE PAS AVEC RDS
StartupGuy
49

La réponse de Frank Heikens ne mettra à jour que la propriété de la base de données. Souvent, vous souhaitez également mettre à jour la propriété des objets contenus (y compris les tables). À partir de Postgres 8.2, REASSIGN OWNED est disponible pour simplifier cette tâche.

MODIFICATION IMPORTANTE!

Ne jamais utiliser REASSIGN OWNED lorsque le rôle d'origine est postgres, cela pourrait endommager l'intégralité de votre instance DB. La commande mettra à jour tous les objets avec un nouveau propriétaire, y compris les ressources système (postgres0, postgres1, etc.)


Tout d'abord, connectez-vous à la base de données d'administration et mettez à jour la propriété de la base de données:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Ceci est un équivalent mondial de ALTER DATABASE commande fournie dans la réponse de Frank, mais au lieu de mettre à jour une base de données particulière, cela change la propriété de toutes les bases de données appartenant à 'old_name'.

L'étape suivante consiste à mettre à jour la propriété des tables pour chaque base de données:

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

Cela doit être effectué sur chaque base de données appartenant à 'old_name'. La commande mettra à jour la propriété de toutes les tables de la base de données.

Antwane
la source
7
Agréable! ... à moins que le propriétaire ne soit postgreslui-même ... A appris ça à la dure.
Chris
1
Le problème est qu'il ne change pas le propriétaire d'une seule base de données, mais qu'il remplace partout le propriétaire par la nouvelle.
Michael003
Le REASSIGN OWNED ci-dessus va changer toute la base de données (s'il y a plusieurs bases de données) dans une même instance pour le nouveau rôle.
varun7447
Pour une alternative à REASSIGN OWNED(généralement parce que votre propriétaire l'est postgres), consultez les extraits dans stackoverflow.com/a/2686185/1839209 .
Michael Herrmann