psql: FATAL: rola "postgres" nie istnieje

Jestem początkującym postgresem.

Zainstalowałem postgres.aplikacja dla komputerów mac. Bawiłem się poleceniami psql i przypadkowo upuściłem bazę danych postgres. Nie wiem, co w niej było.

Obecnie pracuję nad samouczkiem: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

I utknąłem w sudo -u postgres psql postgres

KOMUNIKAT O BŁĘDZIE: psql: FATAL: role "postgres" does not exist

$ które psql

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

To jest to co drukuje z 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)

Więc co czy kroki, które powinienem podjąć? Usunąć wszystko związane z psql i ponownie zainstalować wszystko?

Dzięki za pomoc!

Author: Daniil Ryzhkov, 2013-03-08

14 answers

Zwróć uwagę, że komunikat o błędzie nie mówi o brakującej bazie danych, lecz o brakującej roli. Później w procesie logowania może również potknąć się o brakującą bazę danych.

Ale pierwszym krokiem jest sprawdzenie brakującej roli: jakie jest wyjście psql polecenia \du? Na moim systemie Ubuntu odpowiedni wiersz wygląda tak:

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

Jeśli nie ma przynajmniej jednej roli z superuser, to masz problem: -)

Jeśli jest taki, ty możesz użyć tego do logowania. A patrząc na wynik twojego \l polecenia: uprawnienia user w bazach danych template0 i template1 są takie same jak w moim systemie Ubuntu dla superużytkownika postgres. Więc myślę, że Twoja konfiguracja simple używa user jako superużytkownika. Możesz więc spróbować tego polecenia, aby się zalogować:

sudo -u user psql user

Jeśli {[7] } jest naprawdę superużytkownikiem DB, możesz utworzyć dla niego kolejnego superużytkownika DB i prywatną, pustą bazę danych:

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

Ale od Twojego postgres.konfiguracja aplikacji nie wydaje się tego też nie powinieneś. Proste dostosowanie samouczka.

 251
Author: A.H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 10:13:04

Kluczem jest "zainstalowałem postgres.aplikacja dla komputerów mac."Ta aplikacja ustawia lokalną instalację PostgresSQL z superużytkownikiem bazy danych, którego nazwa roli jest taka sama jak nazwa loginu (krótka).

Gdy Postgres.aplikacja najpierw się uruchamia, tworzy bazę danych $USER, która jest domyślną bazą danych dla psql, gdy nie jest określona. Na domyślnym użytkownikiem jest $USER, bez hasła.

Niektóre skrypty (np. kopia zapasowa bazy danych utworzona za pomocą pgdump na Linuksie systsem) i samouczki przyjmą, że superużytkownik ma tradycyjną nazwę roli postgres.

Możesz sprawić, że Twoja lokalna instalacja będzie wyglądać nieco bardziej tradycyjnie i uniknąć tych problemów, wykonując jeden raz:

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

Co sprawi, że te fatalne: rola "postgres" nie istnieje odejdzie.

 211
Author: jwd630,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 18:24:24

Dla MAC:

  1. Install Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres lub /usr/local/opt/postgres/bin/createuser -s postgres, które po prostu użyją najnowszej wersji.
  5. uruchom serwer postgres ręcznie: pg_ctl -D /usr/local/var/postgres start

Aby uruchomić serwer przy starcie

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

Teraz jest skonfigurowany, Zaloguj się za pomocą psql -U postgres -h localhost lub użyj PgAdmin dla GUI.

Domyślnie użytkownik postgres nie będzie miał żadnego logowania hasło.

Sprawdź tę stronę, aby uzyskać więcej takich artykułów: https://sites.google.com/site/nitinpasumarthy/blog/installingpostgresonmac

 148
Author: Nitin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 22:12:13

Dla mnie ten kod zadziałał:

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

To przyszło stąd: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

 15
Author: Kevin Zhao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 20:09:37
createuser postgres --interactive

Lub zrobić superuser postgresl tylko z

createuser postgres -s
 15
Author: SyntheticMeshwork,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 20:10:51

Najpierw musisz utworzyć użytkownika:

sudo -u postgres createuser --superuser $USER

Po tworzysz bazę danych:

sudo -u postgres createdb $USER

Zmień $USER do nazwy użytkownika systemu.

możesz zobaczyć kompletne rozwiązanie tutaj .

 9
Author: ruzenhack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 05:46:07

Uruchomienie tego w wierszu poleceń powinno to naprawić

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

 7
Author: Alex Levine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-13 21:41:52

I needed to unset $PGUSER:

$ unset PGUSER
$ createuser -s postgres
 6
Author: Beau Barker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 06:54:28

Upuszczenie postgres bazy danych nie ma znaczenia. Ta baza danych jest początkowo pusta, a jej celem jest po prostu, aby użytkownik postgres miał rodzaj "domu" do podłączenia, jeśli będzie go potrzebował.

Nadal możesz odtworzyć go za pomocą polecenia SQL CREATE DATABASE postgres;

Zauważ, że tutorial, o którym mowa w pytaniu, nie jest napisany z myślą o postgres.app. W przeciwieństwie do PostgreSQL dla Uniksa w ogóle, postgres.app stara się wyglądać jak normalna aplikacja w przeciwieństwie do usługi, która byłaby uruchamiana przez dedykowany postgres użytkownik mający inne uprawnienia niż zwykły użytkownik. postgres.app jest prowadzony i zarządzany przez twoje własne konto.

Więc zamiast tego polecenia: [7], byłoby to bardziej w duchu postgres.app to just issue: psql, który automatycznie łączy się z bazą danych pasującą do nazwy użytkownika i z kontem db o tej samej nazwie, które zdarza się być superuser, więc może zrobić wszystko, co ma uprawnienia.
 4
Author: Daniel Vérité,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-08 20:53:25

O ile to jest warte, mam ubuntu i wiele pakietów zainstalowanych i poszło w konflikcie z nim.

Dla mnie prawidłowa odpowiedź brzmiała:

sudo -i -u postgres-xc
psql
 3
Author: softwareplay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 15:37:40

To jedyny, który mi to naprawił:

createuser -s -U $USER
 1
Author: Bax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 00:10:20

Myślę, że sudo nie jest tu potrzebne, ponieważ psql-l Zwraca listę baz danych. To mówi mi, że initdb został uruchomiony pod bieżącym użytkownikiem, a nie Pod użytkownikiem postgres.

Możesz po prostu:
psql

I kontynuuj samouczek.

Sugerowałbym ogólne punkty A. H dotyczące tworzenia użytkownika postgres i db, ponieważ wiele aplikacji może się tego spodziewać.

Krótkie wyjaśnienie:

PostgreSQL nie uruchomi się z dostępem administracyjnym do system operacyjny. Zamiast tego działa ze zwykłym użytkownikiem, a w celu obsługi uwierzytelniania rówieśniczego (pytającego system operacyjny, który próbuje się połączyć) tworzy użytkownika i db z użytkownikiem, który uruchamia proces inicjalizacji. W tym przypadku był to twój normalny użytkownik.

 0
Author: Chris Travers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 14:36:59

Utknąłem w tej sprawie po wykonaniu brew services stop postgresql dzień wcześniej.
następnego dnia: brew services start postgresql nie zadziała. Dzieje się tak, ponieważ jak jest pokazane podczas instalacji za pomocą homebrew. postgresql używa launchd ... który ładuje się, gdy komputer jest włączony.

rozdzielczość:
brew services start postgresql
Uruchom ponownie komputer.

 0
Author: Michael Dimmitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-26 12:33:53

The \du Command return:

Nazwa roli = postgres@implicit_files

I że polecenie postgres=# \password postgres zwraca błąd:

Błąd: rola "postgres" nie istnieje.

Ale to działa dobrze.

Również po sudo -u postgres createuser -s postgres pierwszy wariant również działa.

 0
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 08:39:47