psql: FATAL: il ruolo "postgres" non esiste


406

Sono un novizio di Postgres.

Ho installato postgres.app per mac. Stavo giocando con i comandi psql e ho accidentalmente lasciato cadere il database postgres. Non so cosa ci fosse dentro.

Attualmente sto lavorando a un tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

E sono bloccato a sudo -u postgres psql postgres

MESSAGGIO DI ERRORE: psql: FATAL: role "postgres" does not exist

$ quale psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Questo è ciò che stampa psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Quindi quali sono i passi che dovrei prendere? Eliminare un tutto relativo a psql e reinstallare tutto?

Grazie per l'aiuto ragazzi!


1
Riavvio del computer. Assicura che Launchd brew services start postresqlsia eseguito.
Michael Dimmitt,

Risposte:


411

NOTA: se hai installato postgres usando homebrew, vedi il commento da @ user3402754 di seguito.

Si noti che il messaggio di errore NON parla di un database mancante, ma parla di un ruolo mancante. Più avanti nel processo di accesso potrebbe anche inciampare nel database mancante.

Ma il primo passo è verificare il ruolo mancante: qual è l'output all'interno psqldel comando \du? Sul mio sistema Ubuntu la linea rilevante appare così:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Se non c'è almeno un ruolo con superuser, allora hai un problema :-)

Se ce n'è uno, puoi usarlo per accedere. E guardando l'output del tuo \lcomando: le autorizzazioni per useril database template0e template1sono le stesse del mio sistema Ubuntu per il superutente postgres. Quindi penso che la tua configurazione usi semplicemente usercome superutente. Quindi puoi provare questo comando per accedere:

sudo -u user psql user

Se userè davvero il superutente DB è possibile creare un altro superutente DB e un database privato e vuoto per lui:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Ma dal momento che la tua installazione postgres.app non sembra farlo, non dovresti farlo. Adatta semplicemente il tutorial.


10
Per me, l'utente non è stato creato - questo ha funzionato invece CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; sto usando Postgres v10.
ArcSeldon,

232
Se hai installato Postgres da homebrewallora devi eseguire il /usr/local/opt/postgres/bin/createuser -s postgrestuo terminale
user3402754

8
Ho dovuto correre/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782

1
@ user1807782 Mi hai salvato la giornata; Penso che dovresti pubblicarlo come risposta.
tolga,

1
Se stai usando una versione specifica di postgres, allora devi includere la versione nel percorso -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance

264

La chiave è "Ho installato postgres.app per mac". Questa applicazione imposta l'installazione PostgreSQL locale con un superutente del database il cui nome del ruolo è uguale al nome di accesso (breve).

Quando Postgres.app si avvia per la prima volta, crea il database $ USER, che è il database predefinito per psql quando non ne viene specificato nessuno. L'utente predefinito è $ USER, senza password.

Alcuni script (ad esempio un backup del database creato con pgdumpsu un sistema Linux) e tutorial supporranno che il superutente abbia il nome ruolo tradizionale di postgres.

Puoi rendere l'installazione locale un po 'più tradizionale ed evitare questi problemi facendo una volta sola:

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

che renderà fatali: il ruolo "postgres" non esiste sparisce.


119
Se stai usando Postgres da Homebrew, allora vuoi /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(per la versione 9.2.4, ovviamente).
Roger Lipscombe,

1
Per postgres.app 9.3, sembrano aver riorganizzato le directory. Ho provato: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, ma questo ha generato lo stesso messaggio di errore: "createuser: impossibile connettersi al database postgres: FATAL: il ruolo" postgres "non esiste "
Michael Coxon,

7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresha funzionato correttamente per me.
cjspurgeon,

9
@RogerLipscombe se si esegue brew link postgresqldopo l'installazione, non è necessario aggiungere l'intero percorso a createuser, un semplice createuser -s postgresfunzionerà alla grande
AlessioX

2
createuser -s postgresha funzionato per me. Ho installato Postgres con Homebrew
biniam

228

Per MAC:

  1. Installa Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgreso /usr/local/opt/postgres/bin/createuser -s postgresche utilizzerà solo l'ultima versione.
  5. avviare manualmente il server postgres: pg_ctl -D /usr/local/var/postgres start

Per avviare il server all'avvio

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Ora è configurato, accedi usando psql -U postgres -h localhosto usa PgAdmin per la GUI.

Per impostazione predefinita, l'utente postgresnon avrà alcuna password di accesso.

Controlla questo sito per altri articoli come questo: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


3
Con l'ultima installazione di birra puoi fare brew services start postgresqlper avviare Postgres
Automatico,

<3 <3 <3 <3 <3 <3
Adeel Ahmad il

questa è la risposta migliore
Alejandro Pablo Tkachuk,

39
createuser postgres --interactive

o crea un supergruppo postgresl solo con

createuser postgres -s


Ho trovato questa risposta utile quando il mio pgadmin ha continuato a chiedere l'utente di Postgres e non ho il ruolo di Postgres all'inizio, questo comando l'ha creato, ho aggiunto il pw autogenerato nel mio pgadmin e il problema è stato risolto!
theusual

Questo funziona per me .. ma in questo modo: "crea postgres utente"
Roberto Rodriguez,

31

Ciò accade quando si esegue initdbcon un utente il cui ID non lo è postgres, senza specificare il postgresnome utente con --username=postgreso -U postgres.

Il cluster di database viene quindi creato con l'account utente del sistema utilizzato per eseguire initdb e gli vengono concesse le autorizzazioni del superutente.

Per risolverlo, basta creare un nuovo utente chiamato postgrescon l'opzione --superuserusando l' createuserutility fornita con Postgres. L'utilità si trova nella bindirectory di Postgres . per esempio

createuser --superuser postgres

Se hai un nome host o una porta personalizzati, assicurati di impostare le opzioni appropriate .

Non dimenticare di eliminare l'altro account utente creato per te da initdb.


2
Questa è la risposta più istruttiva.
MyWrathAcademia


16

Ho dovuto disinserire $PGUSER:

$ unset PGUSER
$ createuser -s postgres

1
oh amico, finalmente ho capito qual era il problema.
Scopriamo

14

Per prima cosa devi creare un utente:

sudo -u postgres createuser --superuser $USER

Dopo aver creato un database:

sudo -u postgres createdb $USER

Passa $USER al tuo nome utente di sistema.

Puoi vedere la soluzione completa qui .


8

L'esecuzione sulla riga di comando dovrebbe risolverlo

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>


1
Questa è l'unica cosa che ha funzionato per me. Grazie!
Herb Meehan,

4

Eliminare il postgresdatabase non ha importanza. Questo database è inizialmente vuoto e il suo scopo è semplicemente per l' postgresutente di avere una sorta di "casa" a cui connettersi, nel caso ne avesse bisogno.

Puoi comunque ricrearlo con il comando SQL CREATE DATABASE postgres;

Nota che il tutorial menzionato nella domanda non è stato scritto postgres.apppensando. Contrariamente a PostgreSQL per Unix in generale, postgres.appcerca di sembrare un'applicazione normale rispetto a un servizio che verrebbe eseguito da un postgresutente dedicato con privilegi diversi rispetto al tuo normale utente. postgres.appè gestito e gestito dal tuo account.

Quindi invece di questo comando sudo -u postgres psql -U postgres:, sarebbe più nello spirito di postgres.app semplicemente rilasciare:, psqlche si collega automaticamente a un database corrispondente al nome degli utenti e con un account db con lo stesso nome che risulta essere superutente, quindi può fare qualsiasi cosa per quanto riguarda le autorizzazioni.


Va bene. Ma perché visualizzo un errore ERROR: cannot drop the currently open databasequando provo a eliminare l'utente db? Quindi non è una buona pratica usare questo postgres.app?
user805981

Non è possibile rilasciare un db mentre è collegato ad esso. perché vorresti eliminarlo, comunque? È qui per tua comodità.
Daniel Vérité, l'

Volevo solo vedere se potevo. Quindi è come un database predefinito corretto quando avvio il mio psql e postgres.app? E i privilegi di accesso? Non riesco più a impostarli? Vedo che template0 e template1 hanno i privilegi di accesso
user805981

@ user805981 Postgres.appè a scopo di test e sviluppo; è un pacchetto PostgreSQL di Heroku progettato per rendere più semplice per gli utenti Mac che sviluppano con Ruby on Rails testare con PostgreSQL anziché SQLite predefinito. Gli usi di Rails tendevano a testare con SQLite e si distribuivano su PostgreSQL, il che causava ogni tipo di problema, quindi Heroku ha cercato di rendere più semplice il test anche su PostgreSQL. Postgres.appva bene per i test, ma non prenderei in considerazione l'utilizzo per i dati di produzione o reali, non è proprio per questo.
Craig Ringer

4

Per quello che vale, ho Ubuntu e molti pacchetti installati ed è andato in conflitto con esso.

Per me la risposta giusta è stata:

sudo -i -u postgres-xc
psql

2

Questo è l'unico che l'ha risolto per me:

createuser -s -U $USER

2
Questo rende l'utente corrente un superutente di sistema piuttosto che un superutente di postgres. Direi che questa sarebbe generalmente una cattiva idea in quanto elude le solite politiche di sicurezza. È necessario l'utente sudoper ottenere privilegi di superutente temporanei.
Sean Dawson,

1

Sul sistema Ubuntu, ho eliminato PostgreSQL e reinstallato. Tutti i database vengono ripristinati. Questo ha risolto il problema per me.

Consiglio: eseguire il backup dei database in modo che sia più sicuro.


0

Non penso che sudo sia necessario qui perché psql -l restituisce un elenco di database. Questo mi dice che initdb è stato eseguito con l'utente corrente dell'utente, non con l'utente postgres.

Puoi semplicemente:

psql

E continua il tutorial.

Vorrei suggerire i punti generali di AH sulla creazione dell'utente di postgres e di db perché molte applicazioni potrebbero aspettarsi che ciò esista.

Una breve spiegazione:

PostgreSQL non funzionerà con accesso amministrativo al sistema operativo. Invece, viene eseguito con un utente normale e per supportare l'autenticazione peer (chiedendo al sistema operativo chi sta provando a connettersi) crea un utente e db con l'utente che esegue il processo di inizializzazione. In questo caso era il tuo normale utente.


cancella alcune importanti distinzioni in postgres. Grazie.
imsrgadich,

0

Mi sono bloccato su questo problema dopo aver eseguito brew services stop postgresqlil giorno prima.
Il giorno seguente: brew services start postgresqlnon funzionerebbe. Questo perché come mostrato quando si installa usando homebrew. postgresql usa un launchd ... che si carica all'accensione del computer.

risoluzione:
brew services start postgresql
riavviare il computer.


0

Il \ducomando restituisce:

Nome ruolo = postgres@implicit_files

E quel comando postgres=# \password postgresrestituisce errore:

ERRORE: il ruolo "postgres" non esiste.

Ma va postgres=# \password postgres@implicit_filesbene.

Anche dopo sudo -u postgres createuser -s postgresla prima variante funziona anche.

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.