2012-03-07 9 views
9

Attualmente accedo a PostgreSQL utilizzando psql -U postgres. Come rinominare l'utente postgres in root?Come rinominare il superuser postgres predefinito in "root"?

Se sono già connesso come postgres, provare ALTER USER postgres RENAME TO root dirà ERROR: session user cannot be renamed.

È possibile rinominare l'utente senza accedere come utente postgres? Non penso di avere nessun altro superutente poiché questa è una nuova installazione di PostgreSQL.

A proposito, sto eseguendo Gentoo su Amazon EC2.

+1

Immagino: accedi come postgres, crea un secondo superutente, accedi come nuovo superutente ed esegui il tuo ALTER –

+2

Perché dovresti farlo? Non è possibile eseguire il postmaster come "root" poiché verrà avviato solo quando viene eseguito come utente non privilegiato. –

+0

L'utente 'postgres' in Linux deve corrispondere al ruolo' postgres' nel database? Accedo come 'root' quindi voglio solo digitare' psql -d qualcosa' per accedere come oppose a 'psl -U postgres -d qualcosa'. – hobbes3

risposta

13

Dovresti essere in grado di creare un nuovo superuser postgres chiamato root accedendo come utente postgres e (alla shell) digitando;

createuser --superuser root 
psql> create database root owner root 

Dopo di che, dopo essersi loggati come root, si dovrebbe essere in grado di fare quello che vuoi con l'utente postgres.

+0

Stai dicendo di digitarlo all'interno di 'psql'? Non sembrava fare nulla. – hobbes3

+0

@ hobbes3 No, dalla shell normale, non in psql. –

+0

@hobbes3 Non hai una gentoo box a portata di mano, solo una ubuntu, i percorsi potrebbero non essere impostati se hai un problema. –

2

Si può provare

update pg_authid set rolname ='root' where rolname = 'postgres'; 

ma essere consapevoli, che sgranocchiando i cataloghi di sistema a mano è sempre un po 'pericoloso.

+0

Sembra funzionare. Qual è la differenza tra un ruolo e un utente? Ho effettuato l'accesso come utente o ruolo 'postgres' quando ho eseguito' psql -U postgres'? – hobbes3

+1

@hobbes3: AFAIK "utente" e "gruppo" sono i termini storici che sono stati quindi compressi in "ruolo". Quindi questi termini sono in larga misura intercambiabili. Quindi hai effettuato l'accesso con il ruolo/utente "postgres". –

+1

@hobbes3: Nel moderno PostgreSQL, "utenti" sono [ruoli con un login] (http://www.postgresql.org/docs/current/interactive/sql-createuser.html), i "gruppi" sono senza. Internamente ci sono solo ruoli. –

4

Che dire:

ALTER ROLE postgres RENAME TO root; 

con un ruolo diverso superuser?

+0

"ERRORE: l'utente della sessione non può essere rinominato". Nota, quell'OP è stato registrato come 'postgres'. – Jawa