Createuser: impossibile connettersi al database postgres: FATAL: il ruolo "tom" non esiste


92

Sto provando a configurare Postgres per la prima volta e devo creare un utente con le autorizzazioni per leggere e creare database. Tuttavia, quando uso:

createuser username

nel mio terminale ricevo il seguente messaggio:

createuser: impossibile connettersi al database postgres: FATAL: il ruolo "tom" non esiste

Tom è il mio account utente di Ubuntu a cui ho effettuato l'accesso in questo momento. Sto cercando di creare un nome utente di "postgres", quindi faccio un in psql -U psql template1modo da poter creare un database e assegnargli un proprietario per la mia app Rails.


Stai davvero cercando di creare un utente "postgres"? O solo un utente per la tua app Rails? Normalmente l'utente 'postgres' esiste già e il problema è semplicemente connettersi ad esso per fare ciò di cui hai bisogno.
ostergaard

Risposte:


132

Hai menzionato Ubuntu, quindi immagino che tu abbia installato i pacchetti PostgreSQL da Ubuntu tramite apt.

In tal caso, l' postgresaccount utente PostgreSQL esiste già ed è configurato per essere accessibile tramite peerautenticazione per socket unix in pg_hba.conf. Ci si arriva eseguendo comandi come postgresutente unix, ad esempio:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Questo è tutto nella documentazione di Ubuntu PostgreSQL che è il primo successo di Google per "Ubuntu PostgreSQL" ed è trattato in numerose domande su Stack Overflow.

(Hai reso questa domanda molto più difficile da rispondere omettendo dettagli come il sistema operativo e la versione in cui ti trovi, come hai installato PostgreSQL, ecc.)


bene dopo aver creato owning_user, come ti connetti con questo utente? Intendo connettere l'utente predefinito che uso, sudo -u postgres psql postgres. allo stesso modo come connettere owning_user?
Jony

2
Tre opzioni. (a) Impostare una password per quell'utente e modificare pg_hba.confper usare md5auth per quell'utente (vedere il manuale); (b) Creare un utente del sistema operativo con lo stesso nome e continuare a utilizzare peerauth; o (c) più avanzato, creare una pg_ident.confmappatura per consentire all'utente del sistema operativo di accedere come nuovo utente.
Craig Ringer

66

Vedi git gist con le istruzioni qui

Esegui questo:

 sudo -u postgres psql

O

psql -U postgres

nel tuo terminale per entrare in postgres

NB: se sei su un Mac ed entrambi i comandi sopra non sono riusciti, vai alla sezione sul Mac di seguito

postgres=#

Correre

CREATE USER new_username;

Nota: sostituisci new_username con l'utente che desideri creare, nel tuo caso sarà tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Dal momento che desideri che quell'utente possa creare un DB, devi modificare il ruolo in superutente

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Per confermare, tutto è andato a buon fine,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Aggiornamento / modifica (per Mac):

Recentemente ho riscontrato un errore simile sul mio Mac:

psql: FATAL: role "postgres" does not exist

Questo perché la mia installazione è stata configurata con un superutente del database il cui nome del ruolo è lo stesso del tuo nome di accesso (breve).

Ma alcuni script di Linux presumono che il superutente abbia il nome del ruolo tradizionale di postgres

Come ho risolto questo problema?

Se hai installato con homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Se stai utilizzando una versione specifica di postgres, dì 10.5quindi esegui:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

O:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

O:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Se hai installato con postgres.appper Mac, esegui:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: sostituisci la 10.5 con la tua versione di PostgreSQL


Questo ha funzionato per entrare in postgres:psql -U postgres
leontalbot

29
sudo -u postgres createuser -s tom 

questo dovrebbe aiutarti in quanto ciò accadrà se l'amministratore non ha creato un account utente PostgreSQL per te. Potrebbe anche essere che ti sia stato assegnato un nome utente PostgreSQL diverso dal nome utente del tuo sistema operativo, in tal caso devi usare l'opzione -U.


7

1- Accedi come utente PostgreSQL predefinito (postgres)

sudo -u postgres -i

2- Come utente di postgres. Aggiungi un nuovo utente al database utilizzando il createusercomando

[postgres]$ createuser --interactive

3 uscite

[postgres]$ exit

5

Il tuo errore è pubblicato nella documentazione ufficiale. Puoi leggere questo articolo .

Ho copiato il motivo per te (e ho collegato gli URL) da quell'articolo:

Ciò accadrà se l'amministratore non ha creato un account utente PostgreSQL per te. (Gli account utente PostgreSQL sono diversi dagli account utente del sistema operativo.) Se sei l'amministratore, consulta il Capitolo 20 per informazioni sulla creazione degli account. Dovrai diventare l'utente del sistema operativo in cui è stato installato PostgreSQL (di solito postgres) per creare il primo account utente. Potrebbe anche essere che ti sia stato assegnato un nome utente PostgreSQL diverso dal nome utente del tuo sistema operativo; in tal caso è necessario utilizzare l'opzione -U o impostare la variabile d'ambiente PGUSER per specificare il nome utente PostgreSQL

Per i tuoi scopi, puoi fare:

1) Crea un account utente PostgreSQL:

sudo -u postgres createuser tom -d -P

(l' -Popzione per impostare una password; l' -dopzione per consentire la creazione del database per il tuo nome utente "tom". Nota che "tom" è il nome utente del tuo sistema operativo. In questo modo, puoi eseguire i comandi PostgreSQL senza sudoing.)

2) Ora dovresti essere in grado di eseguire createdbe altri comandi PostgreSQL.


1

Ho avuto lo stesso problema, lo faccio e basta

sudo su - postgres

createuser odoo -U postgres -dRSP #P per la password ( odoo o nome utente che si desidera o concedere l'accesso a postgres)



0

Se non vuoi cambiare il metodo di autenticazione (ident) e fare confusione con pg_hba.conf usa questo:

Primo accesso come utente predefinito

 sudo su - posgres

quindi accedi a psql e crea un utente con lo stesso nome di quello a cui hai effettuato l'accesso

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

puoi verificare il tuo utente con i ruoli corrispondenti con

postgres=#  \du

Dopo questo puoi creare il tuo database e verificarlo con

psql -d dbName
\l
\q

-4

Devi prima eseguire initdb. Creerà il cluster di database e la configurazione iniziale

Vedi Come configurare postgresql per la prima volta? e http://www.postgresql.org/docs/8.4/static/app-initdb.html


5
Questo è completamente sbagliato. Se l'utente non avesse eseguito, initdbnon avrebbe un server di database in esecuzione e che accetti le connessioni per produrre il messaggio di errore segnalato. Rimuovi questa risposta fuorviante. (BTW, in futuro, collega a / docs / current / static / per evitare l'accumulo di link obsoleti)
Craig Ringer
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.