Errore PostgreSQL: fatale: il ruolo "nome utente" non esiste


734

Sto installando il mio PostgreSQL 9.1. Non posso fare nulla con PostgreSQL: impossibile createdb, impossibile createuser; tutte le operazioni restituiscono il messaggio di errore

Fatal: role h9uest does not exist

h9uestè il nome del mio account e sudo apt-get installPostgreSQL 9.1 con questo account.
Errore simile persiste per l' rootaccount.


1
Successivamente potresti imbatterti in FATAL: role "user" is not permitted to log in, controlla dba.stackexchange.com/questions/57723/… per quello.
kqw,

19
Ho risposto a questa domanda qui . Leggi anche questo tutorial " Come installare Postgres per Ubuntu Linux ".
Ruzenhack,

@Ruzenhack quel link tutorial era esattamente quello di cui avevo bisogno! Molto chiaro e semplice
dwanderson il

4
psql -h localhost -U postgres
Metin Atalay

Se ricevi l'errore role doesn't existE l'errore can't create role, it already existscontrolla questa risposta: stackoverflow.com/a/56658832/1689770
Jonathan

Risposte:


775

Utilizzare l' utente del sistema operativo postgres per creare il database, purché non sia stato impostato un ruolo del database con i privilegi necessari che corrispondono all'utente del sistema operativo con lo stesso nome ( h9uestnel proprio caso):

sudo -u postgres -i

Come raccomandato qui o qui .

Quindi riprovare. Digitare exital termine dell'operazione come utente di sistema postgres.

O esegui il singolo comando createusercome postgrescon sudo, come dimostrato da drees in un'altra risposta.

Il punto è utilizzare l'utente del sistema operativo corrispondente al ruolo del database con lo stesso nome per ottenere l'accesso tramite identautenticazione . postgresè l'utente del sistema operativo predefinito che ha inizializzato il cluster di database. Il manuale:

Per avviare il sistema di database, un sistema appena inizializzato contiene sempre un ruolo predefinito. Questo ruolo è sempre un "superutente" e, per impostazione predefinita (a meno che non venga modificato durante l'esecuzione initdb), avrà lo stesso nome dell'utente del sistema operativo che ha inizializzato il cluster di database. Solitamente, questo ruolo verrà nominato postgres. Per creare più ruoli devi prima connetterti come questo ruolo iniziale.

Ho sentito parlare di configurazioni dispari con nomi utente non standard o in cui l'utente del sistema operativo non esiste. Dovresti adattare la tua strategia lì.

Leggi i ruoli del database e l'autenticazione client nel manuale.


1
È impossibile eseguire sudo etccome postgres utente ... Come installare un programma? Vedi questo problema di installazione di S2geometry .
Peter Krauss,

A seconda della configurazione, potrebbe essere semplicemente necessario su postgres.
Fabien Snauwaert,

1
sudo -u postgresnon funziona, mentre sudo -u postgres -ifunziona! Cosa fa la -ibandiera?
parsecer

1
@parsecer: viene avviata una shell interattiva, simile su, ma basata su privilegi sudo. Vedere man sudo.
Erwin Brandstetter,

284

Dopo aver provato le soluzioni di molte altre persone e senza successo, questa risposta finalmente mi ha aiutato.

https://stackoverflow.com/a/16974197/2433309

Insomma, correndo

sudo -u postgres createuser owning_user

crea un ruolo con nome owning_user (in questo caso, h9uest). Successivamente puoi eseguire rake db:createdal terminale con qualsiasi nome account impostato senza dover entrare nell'ambiente Postgres.


29
Se in seguito si verifica un errore "privilegi insufficienti", è possibile aggiungere il flag -s al comando precedente. Questo creerà il tuo nuovo utente come superutente. Si prega di essere consapevoli delle implicazioni di sicurezza di questo se si decide di farlo.
sarink,

1
Ricevo "privilegi insufficienti", ma ora ricevo ERRORE: roll "username" esiste già.
Wylliam Judd,

5
@ConnorLeech Puoi sostituire "postgres" con il nome del tuo superutente PG. Nel mio caso era il mio nome.
myfashionhub,

1
Ho anche dovuto usare -s, e non avevo bisogno di usare sudo -u postgres(ha createuser new_userfunzionato bene)
Meekohi,

2
psql: FATAL: role "jonny" does not existok allora sudo -u postgres -s createuser jonnyallora perché createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan

134
sudo su - postgres

psql template1

creazione di ruolo su pgsql con privilegio di "superutente"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Quindi creare l'utente

CREATE USER username; 
eg. CREATE USER demo;

Assegna privilegio all'utente

GRANT ROOT TO username;

E quindi abilitare l'accesso a quell'utente, in modo da poter eseguire ad es .: psql template1dal $terminale normale :

ALTER ROLE username WITH LOGIN;

4
Ho appena fatto una nuova installazione di PostgreSQL 9.4.4 e sono stato in grado di utilizzare il seguente per creare un nuovo superutente: CREATE ROLE username superuser createdb login; che combina tutti e tre i passaggi ...
iPad Guy

25
# GRANT ROOT per me; ERRORE: il ruolo "root" non esiste
shacker

6
versione più semplice: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela il

2
@shacker#GRANT postgres TO username
7kemZmani,

Sto usando root per avviare il server quindi `` psql -U postgres -h 127.0.0.1 - comando "CREA USER postgresondocker CON SUPERWER PASSWORD 'postgresondocker';" && \ Createdb -O postgresondocker postgresondocker`` posso usare root per fare questo se lo aggiungo a pg_ident?
Shivangi Singh

85

L'installazione di postgres mediante apt-getnon crea un ruolo utente o un database.

Per creare un ruolo di superutente e un database per il tuo account utente personale:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


1
Avevo bisogno di eseguire la seconda parte come:sudo -u postgres createdb $(whoami)
SanD

2
@SanD Se hai creato il tuo account utente come superutente (tramite il -sflag nel primo comando), puoi creare il database come te stesso. Non dovrai correre createdbcome postgres.
Miles Erickson,

2
Bella risposta! Mi ha salvato ore di debug !!
Aminu Kano,

79

Questo funziona per me:

psql -h localhost -U postgres

si prega di aggiungere la password per l'utente sopra.
Chaudhry Waqas,

1
@Vincent se la password non è mai stata modificata dopo l'installazione di PostgreSQL, per impostazione predefinita è postgres(testata su Linux e Windows).
silvioprog,

1
role postgres does not exist
Jacob Schneider,

15

Metodo di lavoro,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer qui cambia peer to trust
  3. ricomincia, sudo service postgresql restart

  4. ora prova, psql -U postgres


1
Dovrebbe essere ovvio che il trustmetodo è consigliabile solo in un ambiente completamente sicuro. Sebbene sia possibile l'accesso da connessioni non attendibili, non esporre mai il cluster DB in questo modo.
Erwin Brandstetter,

questo è buono
horoyoi o

Verifica: se il servizio postgresql non è avviato, è possibile che si verifichi un errore nel filepg_hba.conf
Passeggiata

11

Per la versione Postgres 9.5 usare il seguente comando:

psql -h localhost -U postgres

Spero che questo possa aiutare.


11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

4
psql postgresrisultati:psql: FATAL: role "root" does not exist
TomSawyer,

2
psql postgres -U postgres? Dipende dall'utente (-U) che hai.
Meadowlark Bradsher,

grazie! Ho faticato a fare il backup di postgresql con root poiché non conosco la password di postgres
Dika

7

Nel prompt utente locale, non nel prompt utente root, digitare

sudo -u postgres createuser <local username>

Quindi inserire la password per l'utente locale.

Quindi immettere il comando precedente che ha generato "ruolo 'nome utente' non esiste."

I passaggi precedenti hanno risolto il problema per me. In caso contrario, si prega di inviare messaggi terminali per i passaggi precedenti.



3

La creazione manuale di un cluster DB ha risolto il problema nel mio caso.

Per qualche ragione, quando ho installato Postgres, il "DB iniziale" non è stato creato. L'esecuzione ha initdbfatto il trucco per me.

Questa soluzione è fornita nel Wiki PostgreSQL - Primi passi :

initdb

In genere l'installazione di Postgres sul tuo sistema operativo crea un "DB iniziale" e avvia l'esecuzione del demone del server Postgres. In caso contrario, dovrai eseguire initdb


2

Per utenti Windows :psql -U postgres

Dovresti vedere quindi l'interfaccia della riga di comando di PostgreSQL: postgres=#


0

Segui questi passaggi e funzionerà per te:

  1. correre msfconsole
  2. digitare db_console
  3. verranno mostrate alcune informazioni a te scelte quelle che ti dicono di fare: db_connect user:pass@host:port.../databasescusa non me lo ricordo ma è come questa quindi sostituisci l'utente e la password e l'host e il database con le informazioni incluse nella database.ymlpostazione :/usr/share/metasploit-framework/config
  4. vedrai. ricostruendo la cache del modello in background.
  5. Digita apt-get update && apt-get upgrade dopo l'aggiornamento riavvia il terminale e pranzo msfconsole e funziona puoi verificare che digitando msfconsole: msf>db_statusvedrai che è collegato.

0

scaricare e ripristinare con --no-owner --no-privilegesflag

per esempio

discarica - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

ristabilire - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

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.