Railsy i PostgreSQL: Postgres Role nie istnieje

106

Zainstalowałem PostgreSQL na moim Mac OS Lion i pracuję nad aplikacją railsową. Używam RVM, aby oddzielić wszystko od moich innych aplikacji Railsowych.

Z jakiegoś powodu, kiedy próbuję przenieść bazę danych po raz pierwszy, rake nie może znaleźć użytkownika postgres. Otrzymuję błąd

 FATAL:  role "postgres" does not exist

Mam pgAdmin, więc wyraźnie widzę, że w DB jest użytkownik postgres - w rzeczywistości konto administratora - więc nie jestem pewien, co jeszcze zrobić.

Czytałem gdzieś o ludziach mających problemy z PostgreSQL z powodu tego, w której ścieżce został zainstalowany, ale nie sądzę, żebym zaszedł tak daleko, gdyby nie mógł znaleźć bazy danych.

Adam
źródło
Jeśli chodzi o ściśle powiązany problem, w którym użytkownik bazy danych (= rola) postgresnie został utworzony, co może prowadzić do tego samego komunikatu o błędzie, zobacz to powiązane pytanie: stackoverflow.com/questions/11919391/ ...
Erwin Brandstetter

Odpowiedzi:

12

Ten komunikat pojawia się, gdy użytkownik bazy danych nie istnieje. Porównaj instrukcję tutaj .
Wiele lokalnych baz danych nie może być wyjaśnieniem. Role obowiązują w całym klastrze. Instrukcja ponownie :

Należy zauważyć, że role są definiowane na poziomie klastra bazy danych, a zatem są ważne we wszystkich bazach danych w klastrze.

Musisz znaleźć się w innym klastrze baz danych . To byłby inny serwer działający na tej samej maszynie, nasłuchujący na innym porcie. Lub, co bardziej prawdopodobne, na innym komputerze.

Czy to możliwe, że wiadomość faktycznie pochodzi ze zdalnego serwera?

Erwin Brandstetter
źródło
To było to - miałem problemy z uzyskaniem postgresql do okresu pracy, więc wykonałem nową instalację, więc muszę mieć teraz kilka instancji. Zmieniono jednak port w pliku database.yml i wszystko działało dobrze. Dzięki za pomoc!
Adam
nie działał nawet po wyczyszczeniu wszystkich obrazów - docker rmi $(docker images -q) --force. ale problem był volumeschyba na
prayagupd
267

Właściwie z nieznanego powodu stwierdziłem, że problem polegał na tym, że rola postgresql nie została utworzona.

Spróbuj biegać:

createuser -s -r postgres

Zauważ, że role to sposób, w jaki PostgreSQL utrzymuje uprawnienia do bazy danych . Jeśli nie ma roli dla użytkownika postgres, to nie ma do niczego dostępu. Polecenie createuser to cienkie opakowanie wokół poleceń CREATE USER, CREATE ROLE itp.

Chris Sherlock
źródło
8
Musiałem użyć, sudo su - postgreszanim to polecenie zadziałało dla mnie. Dzięki!
Connor Leech
2
Nie wiem, jak doszło do mojej konfiguracji, ale utworzyłem postgresql bez użytkownika i roli postgres, myUser jako jedynego użytkownika, ale odmówiłem wpuszczenia mnie pod pretekstem, że baza danych o nazwie myUser nie istnieje! ta odkryta część chaosu!
Jerome
@StuartNelson: Wydaje się, że jest to rozwiązanie powszechnego problemu (to samo tutaj ). Ale to oczywiście nie jest odpowiedź na to pytanie. PO jasno stwierdza, że ​​rola ta istniała w jego PB.
Erwin Brandstetter
Tyle, że mylisz role z użytkownikami. Użytkownik istniał, rola nie - mówi wyraźnie, że istnieje użytkownik , a nie rola.
Chris Sherlock,
Ta -ropcja nie jest konieczna w przypadku -sopcji. Superuser zawiera atrybut „Utwórz rolę”.
Dennis
26

Ostatnio mam ten problem zaraz po zainstalowaniu postgres. Jeśli pojawia się natychmiast po instalacji, być może brakuje domyślnego użytkownika postgres. W takim przypadku możesz utworzyć domyślne postgres użytkownika za pomocą poniższego polecenia.

createuser -s -U $ USER

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

Zostaniesz poproszony o wpisanie wymaganej nazwy roli i hasła bazy danych Po zakończeniu procesu możesz zalogować się do konsoli postgres za pomocą poniższego polecenia

psql -U 'your_database_name'

Np .: psql -U postgres
Tutaj, podczas tworzenia użytkownika, musisz podać hasło, jeśli je podałeś.

Mam nadzieję, że to pomoże :)

Prem
źródło
22

Byłem na OSX 10.8 i wszystko, czego próbowałem, dawało mi FATAL: role "USER" does not exist. Jak wiele osób tu mówi, uciekaj createuser -s USER, ale to dało mi ten sam błąd. To w końcu zadziałało:

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

createuser -s --username=postgresTworzy superużytkownika (-s) Po podłączeniu jak PostgreSQL (--username = postgres'owy Flag).

Widzę, że udzielono odpowiedzi na twoje pytanie, ale chcę dodać tę odpowiedź dla osób używających OSX próbujących zainstalować PostgreSQL 9.2.4.

Jacek
źródło
2
Możesz skrócić pierwsze dwie linie do sudo su postgres.
6 stóp Dan
To też było rozwiązanie dla mnie na ubuntu, nie zapomnij zaktualizować swojej bazy
danych.yml,
10

Spotkałem się z tym problemem od razu, kiedy po raz pierwszy instalowałem POSTGRES.app Heroku. Po jednej porannej próbie i błędzie myślę, że ten jeden wiersz kodu rozwiązał problem. Jak opisano wcześniej, dzieje się tak, ponieważ postgresql nie ma domyślnej roli podczas pierwszej konfiguracji. I musimy to ustawić.

sovanlandy=# CREATE ROLE postgres LOGIN;

Aby użyć tego polecenia psql, musisz zalogować się do odpowiedniej konsoli psql.

Zauważyłeś również, że jeśli utworzyłeś już rolę `` postgre '', ale nadal otrzymujesz błędy uprawnień, musisz zmienić za pomocą polecenia:

sovanlandy=# ALTER ROLE postgres LOGIN;

Mam nadzieję, że to pomoże!

sovanlandy
źródło
4

W dokumentacji Heroku; Zaczynając z szynami 4, mówią:

Będziesz także musiał usunąć pole nazwy użytkownika w pliku database.yml, jeśli takie istnieje: W pliku config / database.yml remove: nazwa użytkownika: myapp

Następnie po prostu usuwasz tę linię w "programowaniu:", jeśli nie pg mówi do bazy danych, która działa pod rolą "myapp"

Ta linia mówi railsom, że baza danych myapp_development powinna być uruchamiana w roli myapp. Ponieważ prawdopodobnie nie masz tej roli w swojej bazie danych, usuniemy ją. Za pomocą wiersza remove Railsy spróbują uzyskać dostęp do bazy danych jako użytkownik aktualnie zalogowany na komputerze.

Pamiętaj też o stworzeniu bazy danych do programowania:

$createdb myapp_development

Zastąp „myapp” nazwą swojej aplikacji

Yunrock
źródło
2

Czy możesz mieć wiele lokalnych baz danych? Sprawdź swoją database.ymli upewnij się, że trafiasz na pg db, który chcesz. Użyj, rails consoleaby potwierdzić.

Jonathan Julian
źródło
2

Procedura instalacji tworzy konto użytkownika o nazwie, postgresktóre jest skojarzone z domyślną rolą Postgres. Aby korzystać z Postgres, możesz zalogować się na to konto. Ale jeśli nie zostanie to wyraźnie określone, aplikacja railsowa szuka innej roli, w szczególności roli posiadającej twoją nazwę użytkownika unix, która może nie zostać utworzona w rolach postgres.

Aby temu zaradzić, możesz utworzyć nową rolę, najpierw przełączając się na domyślny postgres roli, który został utworzony podczas instalacji

sudo -i -u postgres

Po zalogowaniu się na konto postgres możesz stworzyć nowego użytkownika poleceniem:

createuser --interactive

Spowoduje to dokonanie pewnych wyborów i, na podstawie Twoich odpowiedzi, wykonanie odpowiednich poleceń Postgres, aby utworzyć użytkownika.

Pomiń nazwę roli i niektóre uprawnienia, a rola zostanie utworzona, a następnie możesz przeprowadzić migrację bazy danych

Mayur
źródło
1

Moja odpowiedź była znacznie prostsza. Po prostu przeszedłem do folderu db i usunąłem kolumnę id, którą próbowałem na siłę utworzyć, ale która w rzeczywistości jest tworzona automagicznie. Usunąłem również NAZWĘ UŻYTKOWNIKA w pliku database.yml (w folderze konfiguracyjnym).

maudulus
źródło
1

W wierszu poleceń lokalnego użytkownika Ubuntu, ale nie użytkownika root, wpisz

sudo -u postgres nazwa użytkownika createuser

nazwa użytkownika powyżej powinna być zgodna z nazwą podaną w komunikacie „KRYTYCZNY: rola 'nazwa użytkownika' nie istnieje”.

Wprowadź hasło dla nazwy użytkownika.

Następnie wprowadź ponownie komendę, która wygenerowała komunikat, że rola nie istnieje.

Robert Cambil
źródło
0

Skończyło się tutaj po próbie wykonania samouczka Ryana Bate'a na temat wdrażania na AWS EC2 z gumą. Oto, co mi się przydarzyło: utworzyliśmy nową aplikację przy użyciu „

rails new blog -d postgresql

Oczywiście powoduje to utworzenie nowej aplikacji z bazą danych pg, ale baza danych nie została jeszcze utworzona. Z sqlite, po prostu uruchamiasz rake db: migrate, jednak z pg musisz najpierw utworzyć bazę danych pg. Ryan nie zrobił tego kroku. Polecenie brzmi rake db:create:all, wtedy możemy biecrake db:migrate

Druga część to zmiana pliku database.yml. Domyślną nazwą użytkownika podczas generowania pliku jest „nazwa aplikacji”. Jednak są szanse, że twoja rola dla administratora postgresql jest inna (przynajmniej była dla mnie). Zmieniłem to na swoje imię (zobacz powyższe porady dotyczące tworzenia nazwy roli) i było dobrze.

Mam nadzieję że to pomoże.

Andrew Shenstone
źródło
0

Po kilku instalacjach i odinstalowywaniu Postgres, oto, co wydaje mi się, że teraz działa konsekwentnie z Os X Mavericks, Rails 4 i Ruby 2.

  1. W pliku database.yml zmieniam domyślne nazwy użytkownika na nazwę użytkownika mojego komputera, która dla mnie to po prostu „admin”.

  2. W wierszu poleceń uruchamiam rake db: create: all

  3. Następnie uruchamiam rake db: migrate

  4. Kiedy uruchamiam serwer railsowy i sprawdzam lokalnego hosta, pojawia się komunikat „Witamy na pokładzie”.

Michael van Holst
źródło
0

Możesz to obejść, uruchamiając initdb -U postgres -D /path/to/datalub uruchamiając go jako postgres użytkownika, ponieważ domyślnie jest to bieżący użytkownik. GL!

rogerdpack
źródło