psql: FATAL: il ruolo “postgres” non esiste

Sono un principiante postgres.

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

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

E sono bloccato su 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 da 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!

Si noti che il messaggio di errore NON parla di un database mancante, parla di un ruolo mancante. Successivamente nel processo di login potrebbe inciampare anche nel database mancante.

Ma il primo passo è controllare il ruolo mancante: qual è l’output all’interno di psql del comando \du ? Sul mio sistema Ubuntu la linea relativa si presenta 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 osservando l’output del tuo comando \l : Le autorizzazioni per l’ user sui database template0 e template1 sono le stesse del mio sistema Ubuntu per i postgres superuser. Quindi penso che la tua configurazione utilizzi l’ user come superutente. Quindi potresti provare questo comando per accedere:

 sudo -u user psql user 

Se l’ user è in realtà il superutente DB, è ansible 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 il tuo setup postgres.app non sembra farlo, non dovresti farlo. Semplice adattare il tutorial.

La chiave è “Ho installato il postgres.app per mac”. Questa applicazione imposta l’installazione PostgresSQL locale con un superutente di database il cui nome di 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 pgdump su un systsem Linux) e le esercitazioni supporteranno che il superutente abbia il tradizionale nome di ruolo di postgres .

Puoi rendere l’installazione locale un po ‘più tradizionale ed evitare questi problemi eseguendo una volta sola:

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

che renderà FATAL: il ruolo “postgres” non esiste, va via.

Per MAC:

  1. Installa Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql//bin/createuser -s postgres o /usr/local/opt/postgres/bin/createuser -s postgres che useranno solo la versione più recente.
  5. avvia 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, effettua il login usando psql -U postgres -h localhost o usa PgAdmin per GUI.

Di default, l’utente postgres non avrà alcuna password di accesso.

Controlla questo sito per altri articoli come questo: https://sites.google.com/site/nitinpasumarthy/blog/installingpostgresonmac

Per me, questo codice ha funzionato:

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

è venuto da qui: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

 createuser postgres --interactive 

o creare un superuser postgresl solo con

 createuser postgres -s 

Per prima cosa devi creare un utente:

 sudo -u postgres createuser --superuser $USER 

Dopo aver creato un database:

 sudo -u postgres createdb $USER 

Cambia $USER nel tuo nome utente di sistema.

Puoi vedere la soluzione completa qui .

L’esecuzione di questo sulla riga di comando dovrebbe risolverlo

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb

Avevo bisogno di disinserire $PGUSER :

 $ unset PGUSER $ createuser -s postgres 

Eliminare il database postgres non ha molta importanza. Questo database è inizialmente vuoto e il suo scopo è semplicemente che l’utente postgres abbia una sorta di “casa” a cui connettersi, nel caso ne avesse bisogno.

È comunque ansible ricrearlo con il comando SQL CREATE DATABASE postgres;

Nota che il tutorial menzionato nella domanda non è scritto con postgres.app in mente. Contrariamente a PostgreSQL per Unix in generale, postgres.app cerca di apparire come una normale applicazione in contrapposizione a un servizio che verrebbe gestito da un utente postgres dedicato con diversi privilegi rispetto al tuo normale utente. postgres.app viene eseguito e gestito dal tuo account.

Quindi, al posto di questo comando: sudo -u postgres psql -U postgres , sarebbe più nello spirito di postgres.app al solo rilascio: psql , che si connette automaticamente ad un database che corrisponde al nome dell’utente, e con un account db del lo stesso nome che è superutente, quindi può fare qualsiasi cosa in termini di permessi.

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 

Non penso che sudo sia necessario qui perché psql -l restituisce una lista di database. Questo mi dice che initdb è stato eseguito sotto l’utente corrente dell’utente, non sotto l’utente postgres.

Puoi solo:

 psql 

E continua il tutorial.

Suggerirei i punti generali di AH di creare l’utente postgres e db perché molte applicazioni potrebbero aspettarsi che questo esista.

Una breve spiegazione:

PostgreSQL non verrà eseguito con accesso amministrativo al sistema operativo. Funziona invece con un utente normale e, per supportare l’autenticazione peer (chiedendo al sistema operativo che sta tentando di connettersi), crea un utente e db con l’utente che esegue il processo di inizializzazione. In questo caso era il tuo normale utente.

Questo è l’unico che lo ha risolto per me:

 createuser -s -U $USER 

Sono rimasto bloccato su questo problema dopo aver eseguito i brew services stop postgresql il giorno precedente.
Il giorno seguente: i brew services start postgresql non funzionerebbe. Questo perché come mostrato quando si installa usando homebrew. postgresql usa un launchd … che si carica quando il tuo computer è acceso.

risoluzione:
brew services start postgresql
Riavvia il tuo computer.

Il comando \du restituisce:

Nome ruolo = [email protected]_files

E quel comando postgres=# \password postgres errore di ritorno:

ERRORE: il ruolo “postgres” non esiste.

Ma postgres=# \password [email protected]_files funziona bene.

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