Come cambiare il proprietario del database PostgreSql?


205

Devo cambiare il proprietario del database PostgreSql.

Come cambiare il proprietario del database PostgreSql in phppgadmin?

Risposte:


345
ALTER DATABASE name OWNER TO new_owner;

Vedi la voce del manuale Postgresql su questo per maggiori dettagli.


3
Per completezza ecco la parte del manuale che documenta questo: postgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name

17
@ mArtinko5MB: è impossibile, ALTER non DROP un database.
Frank Heikens,

17
@ mArtinko5MB: anche impossibile, ALTER TABLE non DROP la tabella. Mostraci il tuo SQL, qualcosa è gravemente rotto nelle tue dichiarazioni.
Frank Heikens,

18
Nota, tutte le tabelle e le sequenze all'interno del database verranno comunque assegnate al proprietario originale.
Cerin,

2
ERROR: must be member of role ...= NON FUNZIONA CON RDS
StartupAcquista il

49

La risposta di Frank Heikens aggiornerà solo la proprietà del database. Spesso, si desidera anche aggiornare la proprietà degli oggetti contenuti (comprese le tabelle). A partire da Postgres 8.2, REASSIGN OWNED è disponibile per semplificare questa attività.

MODIFICA IMPORTANTE!

Non usare mai REASSIGN OWNEDquando il ruolo originale è postgres, questo potrebbe danneggiare l'intera istanza del DB. Il comando aggiorna tutti gli oggetti con un nuovo proprietario, comprese le risorse di sistema (postgres0, postgres1, ecc.)


Innanzitutto, connettiti al database di amministrazione e aggiorna la proprietà del DB:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Questo è un equivalente globale del ALTER DATABASEcomando fornito nella risposta di Frank, ma invece di aggiornare un determinato DB, cambia la proprietà di tutti i DB di proprietà di "old_name".

Il prossimo passo è aggiornare la proprietà delle tabelle per ciascun database:

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

Questo deve essere eseguito su ciascun DB di proprietà di 'old_name'. Il comando aggiornerà la proprietà di tutte le tabelle nel DB.


7
Bello! ... a meno che il proprietario non sia postgreslui stesso ... L'ho imparato nel modo più duro.
Chris

1
Il problema è che non cambia il proprietario di un singolo database, ma sostituisce il proprietario ovunque con quello nuovo.
Michael003,

Il precedente REASSIGN OWNED cambierà tutto il database (se ci sono più database) in una stessa istanza con il nuovo ruolo.
varun7447

Per un'alternativa a REASSIGN OWNED(in genere perché il proprietario è postgres), vedere i frammenti in stackoverflow.com/a/2686185/1839209 .
Michael Herrmann,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.