Rails e PostgreSQL: il ruolo postgres non esiste


106

Ho installato PostgreSQL sul mio Mac OS Lion e sto lavorando a un'app per rails. Uso RVM per mantenere tutto separato dalle mie altre app Rails.

Per qualche motivo, quando provo a migrare il db per la prima volta, rake non riesce a trovare l'utente postgres. Ottengo l'errore

 FATAL:  role "postgres" does not exist

Ho pgAdmin quindi posso vedere chiaramente che c'è un utente postgres nel DB - l'account admin in effetti - quindi non sono sicuro di cos'altro fare.

Ho letto da qualche parte di persone che hanno problemi con PostgreSQL a causa del percorso in cui è stato installato, ma non penso che sarei arrivato a tanto se non fosse riuscito a trovare il db.


Per il problema strettamente correlato in cui l'utente DB (= ruolo) postgresnon è stato creato, che può portare allo stesso messaggio di errore, vedere questa domanda correlata: stackoverflow.com/questions/11919391/…
Erwin Brandstetter

Risposte:


12

Questo messaggio viene visualizzato quando l'utente del database non esiste. Confronta il manuale qui .
Più database locali non possono essere la spiegazione. I ruoli sono validi a livello di cluster. Di nuovo il manuale :

Notare che i ruoli sono definiti a livello di cluster di database e quindi sono validi in tutti i database nel cluster.

Devi finire in un altro cluster di database . Sarebbe un altro server in esecuzione sulla stessa macchina, in ascolto su una porta diversa. O, più probabilmente, su una macchina diversa.

Potrebbe essere che il messaggio provenga, appunto, dal server remoto?


Questo è tutto: ho avuto difficoltà a far funzionare postgresql, quindi ho eseguito una nuova installazione, quindi devo avere un paio di istanze qui ora. Tuttavia, è stata modificata la porta nel file database.yml e tutto ha funzionato bene. Grazie per l'aiuto!
Adam

non ha funzionato anche dopo aver ripulito tutte le immagini - docker rmi $(docker images -q) --force. ma volumescredo che il problema fosse in corso
Prayagupd

267

In realtà, per qualche motivo sconosciuto, ho scoperto che il problema era in realtà perché il ruolo postgresql non era stato creato.

Prova a correre:

createuser -s -r postgres

Nota che i ruoli sono il modo in cui PostgreSQL mantiene i permessi del database . Se non esiste un ruolo per l'utente postgres, non può accedere a nulla. Il comando createuser è un sottile involucro attorno ai comandi CREATE USER, CREATE ROLE, ecc.


8
Ho dovuto usare sudo su - postgresprima che questo comando funzionasse per me. Grazie!
Connor Leech

2
Non so come sia nata la mia configurazione, ma ho creato postgresql senza utente e ruolo postgres, myUser come unico utente, ma mi sono rifiutato di farmi entrare con il pretesto che il database chiamato myUser era inesistente! questa parte svelata del caos!
Jerome

@StuartNelson: questa sembra essere la soluzione a un problema comune (lo stesso qui ). Ma ovviamente non è la risposta a questa domanda. Il PO afferma chiaramente che il ruolo esisteva nel suo DB.
Erwin Brandstetter

Tranne che stai fondendo ruoli con utenti. L'utente esisteva, il ruolo no - dice chiaramente che l' utente esiste, non il ruolo.
Chris Sherlock

L' -ropzione non è necessaria con l' -sopzione. Il superutente include l'attributo "Crea ruolo".
Dennis

26

Recentemente ho riscontrato questo problema subito dopo aver installato postgres. Se arriva immediatamente dopo l'installazione, potresti perdere l'utente predefinito, postgres. In tal caso, puoi creare postgres utente predefinito utilizzando il comando seguente.

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Ti chiederà di inserire il nome del ruolo del database e la password richiesti Una volta completato il processo, puoi accedere alla console di postgres usando il comando seguente

psql -U 'your_database_name'

Es: psql -U postgres
Qui, devi inserire la password se ne hai fornita, durante la creazione dell'utente.

Spero che sia d'aiuto :)


22

Ero su OSX 10.8 e tutto ciò che ho provato mi avrebbe dato il FATAL: role "USER" does not exist. Come molte persone hanno detto qui, corri createuser -s USER, ma questo mi ha dato lo stesso errore. Questo finalmente ha funzionato per me:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

Il createuser -s --username=postgrescrea un superutente (flag -s) collegandosi come postgres (--username = flag postgres).

Vedo che la tua domanda ha avuto una risposta, ma voglio aggiungere questa risposta per le persone che usano OSX che cercano di installare PostgreSQL 9.2.4.


2
Puoi accorciare le prime due righe a sudo su postgres.
6 piedi Dan

Questa è stata anche la soluzione per me su Ubuntu, non dimenticare di aggiornare il tuo database.yml per utilizzare lo stesso nome utente come sopra
crobicha

10

Ho riscontrato questo problema proprio quando ho installato per la prima volta POSTGRES.app di Heroku. Dopo una mattinata di tentativi ed errori, penso che questa riga di codice abbia risolto il problema. Come descritto in precedenza, ciò è dovuto al fatto che postgresql non ha un ruolo predefinito la prima volta che viene impostato. E dobbiamo impostarlo.

sovanlandy=# CREATE ROLE postgres LOGIN;

È necessario accedere alla rispettiva console psql per utilizzare questo comando psql.

Notare inoltre che, se hai già creato il ruolo "postgre" ma ottieni ancora errori di autorizzazione, devi modificare con il comando:

sovanlandy=# ALTER ROLE postgres LOGIN;

Spero che sia d'aiuto!


4

Nella documentazione di Heroku; Iniziando con i binari 4, dicono:

Dovrai anche rimuovere il campo nome utente nel tuo database.yml se ce n'è uno così: Nel file config / database.yml rimuovere: nome utente: miaapp

Quindi cancella semplicemente quella riga in "sviluppo:", se non pg dice al database che funziona sotto il ruolo "miaapp"

Questa riga dice a rails che il database myapp_development dovrebbe essere eseguito con il ruolo di myapp. Poiché probabilmente non hai questo ruolo nel tuo database, lo rimuoveremo. Con la riga remove Rails tenterà di accedere al database come utente attualmente connesso al computer.

Ricorda anche di creare il database per lo sviluppo:

$createdb myapp_development

Sostituisci "myapp" con il nome della tua app


2

Potreste avere più database locali? Controlla il tuo database.ymle assicurati di premere il db pg che desideri. Utilizzare rails consoleper confermare.


2

La procedura di installazione crea un account utente denominato postgresche è associato al ruolo Postgres predefinito. Per utilizzare Postgres, puoi accedere a quell'account. Ma se non esplicitamente specificato, l'app rails cerca un ruolo diverso, in particolare il ruolo con il tuo nome utente unix che potrebbe non essere creato nei ruoli postgres.

Per ovviare a ciò, puoi creare un nuovo ruolo, prima passando al ruolo predefinito postgres che è stato creato durante l'installazione

sudo -i -u postgres

Dopo aver effettuato l'accesso all'account postgres, puoi creare un nuovo utente con il comando:

createuser --interactive

Questo ti chiederà alcune scelte e, in base alle tue risposte, esegui i comandi Postgres corretti per creare un utente.

Passa il nome di un ruolo e alcune autorizzazioni e il ruolo viene creato, puoi quindi migrare il tuo db


1

La mia risposta è stata molto più semplice. Sono appena andato nella cartella db e ho cancellato la colonna id, che avevo provato a creare con forza, ma che in realtà viene creata automaticamente. Ho anche cancellato USERNAME nel file database.yml (nella cartella config).


1

Nel prompt dei comandi dell'utente locale di Ubuntu, ma non l'utente root, digitare

sudo -u postgres createuser nome utente

il nome utente sopra deve corrispondere al nome indicato nel messaggio "IRREVERSIBILE: il ruolo" nome utente "non esiste."

Immettere la password per il nome utente.

Quindi immettere nuovamente il comando che ha generato il ruolo non esiste messaggio.


0

Sono finito qui dopo aver tentato di seguire il tutorial di Ryan Bate sulla distribuzione in AWS EC2 con gomma. Ecco cosa è successo per me: abbiamo creato una nuova app utilizzando "

rails new blog -d postgresql

Ovviamente questo crea una nuova app con pg come database, ma il database non è stato ancora creato. Con sqlite, devi solo eseguire rake db: migrate, tuttavia con pg devi prima creare il database pg. Ryan non ha eseguito questo passaggio. Il comando è rake db:create:all, quindi possiamo eseguirerake db:migrate

La seconda parte sta cambiando il file database.yml. L'impostazione predefinita per il nome utente quando viene generato il file è "appname". Tuttavia, è probabile che il tuo ruolo per l'amministratore di postgresql sia qualcosa di diverso (almeno lo era per me). L'ho cambiato con il mio nome (vedi sopra i consigli sulla creazione di un nome per il ruolo) ed ero a posto.

Spero che questo ti aiuti.


0

Dopo un po 'di installazione e disinstallazione di Postgres, ecco cosa sembra funzionare in modo coerente per me con Os X Mavericks, Rails 4 e Ruby 2.

  1. Nel file database.yml, cambio i nomi utente predefiniti con il nome utente del mio computer che per me è solo "admin".

  2. Nella riga di comando eseguo rake db: create: all

  3. Quindi eseguo rake db: migrate

  4. Quando eseguo il server rails e controllo l'host locale viene visualizzato il messaggio "Benvenuto a bordo".


0

Potresti essere in grado di risolvere questo problema eseguendolo initdb -U postgres -D /path/to/datao eseguendolo come utente postgres, poiché il valore predefinito è l'utente corrente. GL!

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.