Createuser: nie można połączyć się z postgres bazy danych: FATAL: rola „tom” nie istnieje

92

Próbuję skonfigurować Postgres po raz pierwszy i muszę utworzyć użytkownika z uprawnieniami do czytania i tworzenia baz danych. Jednak kiedy używam:

createuser username

w moim terminalu otrzymuję następujący komunikat:

createuser: nie można połączyć się z postgres bazy danych: FATAL: rola "tom" nie istnieje

Tom to moje konto użytkownika Ubuntu, na które jestem teraz zalogowany. Próbuję utworzyć nazwę użytkownika „postgres”, a następnie zrobić, psql -U psql template1aby móc utworzyć bazę danych i przypisać jej właściciela dla mojej aplikacji Railsowej.

Tom Maxwell
źródło
Czy naprawdę próbujesz utworzyć użytkownika „postgres”? A może tylko użytkownik Twojej aplikacji Rails? Zwykle użytkownik „postgres” już istnieje i problem polega na połączeniu się z nim, aby zrobić to, czego potrzebujesz.
ostergaard

Odpowiedzi:

132

Wspomniałeś o Ubuntu, więc zgadnę, że zainstalowałeś pakiety PostgreSQL z Ubuntu przez apt.

Jeśli tak, postgreskonto użytkownika PostgreSQL już istnieje i jest skonfigurowane tak, aby było dostępne poprzez peeruwierzytelnianie dla gniazd unix w pg_hba.conf. Dostajesz się do tego wykonując polecenia jako postgresużytkownik unixa, np .:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Wszystko to znajduje się w dokumentacji Ubuntu PostgreSQL, która jest pierwszym hitem Google dotyczącym „Ubuntu PostgreSQL” i jest omówiona w wielu pytaniach dotyczących przepełnienia stosu.

(Znacznie utrudniłeś odpowiedź na to pytanie, pomijając szczegóły, takie jak system operacyjny i wersja, na której jesteś, sposób zainstalowania PostgreSQL itp.)

Craig Ringer
źródło
dobrze po utworzeniu owning_user, Jak połączyć się z tym użytkownikiem? Mam na myśli połączenie domyślnego użytkownika, którego używam, sudo -u postgres psql postgres. w ten sam sposób, jak połączyć owning_user?
Jony,
2
Trzy opcje. (a) Ustaw hasło dla tego użytkownika i edytuj, pg_hba.confaby użyć md5autoryzacji dla tego użytkownika (patrz instrukcja); (b) Utworzyć użytkownika systemu operacyjnego o tej samej nazwie i nadal używać peeruwierzytelniania; lub (c) bardziej zaawansowane, utwórz pg_ident.confmapowanie, aby umożliwić użytkownikowi systemu operacyjnego zalogowanie się jako nowy użytkownik.
Craig Ringer
66

Zobacz git z instrukcjami tutaj

Uruchomić to:

 sudo -u postgres psql

LUB

psql -U postgres

w terminalu, aby dostać się do postgres

NB: Jeśli używasz komputera Mac i oba powyższe polecenia nie powiodły się, przejdź do sekcji dotyczącej komputera Mac poniżej

postgres=#

Biegać

CREATE USER new_username;

Uwaga: Zastąp nowa_nazwa_użytkownika nazwą użytkownika, którego chcesz utworzyć, w twoim przypadku będzie to tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Ponieważ chcesz, aby ten użytkownik mógł tworzyć bazę danych, musisz zmienić rolę na superużytkownika

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Aby potwierdzić, wszystko się udało,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Aktualizacja / modyfikacja (dla komputerów Mac):

Niedawno napotkałem podobny błąd na moim Macu:

psql: FATAL: role "postgres" does not exist

Wynika to z faktu, że moja instalacja została skonfigurowana z superużytkownikiem bazy danych, którego nazwa roli jest taka sama, jak nazwa logowania (krótka).

Ale niektóre skrypty linuxowe zakładają, że superużytkownik ma tradycyjną nazwę roli postgres

Jak to rozwiązałem?

Jeśli zainstalowałeś za pomocą homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Jeśli używasz określonej wersji postgres, powiedz, 10.5a następnie uruchom:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

LUB:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

LUB:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Jeśli zainstalowałeś z postgres.appdla Mac, uruchom:

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

PS: zastąp 10.5 swoją wersją PostgreSQL

user3402754
źródło
To zadziałało, aby dostać się do postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

to powinno ci pomóc, ponieważ stanie się to, jeśli administrator nie utworzył dla ciebie konta użytkownika PostgreSQL. Może się również zdarzyć, że przypisano Ci nazwę użytkownika PostgreSQL, która różni się od nazwy użytkownika systemu operacyjnego, w takim przypadku musisz użyć przełącznika -U.

Tanmay
źródło
7

1- Zaloguj się jako domyślny użytkownik PostgreSQL (postgres)

sudo -u postgres -i

2- Jako użytkownik postgres. Dodaj nowego użytkownika bazy danych za pomocą createuserpolecenia

[postgres]$ createuser --interactive

3 wyjścia

[postgres]$ exit
Saman Mohamadi
źródło
5

Twój błąd został opublikowany w oficjalnej dokumentacji. Możesz przeczytać ten artykuł .

Skopiowałem powód dla Ciebie (i zamieściłem hiperlink na adresy URL) z tego artykułu:

Dzieje się tak, jeśli administrator nie utworzył dla Ciebie konta użytkownika PostgreSQL. (Konta użytkowników PostgreSQL różnią się od kont użytkowników systemu operacyjnego). Jeśli jesteś administratorem, zapoznaj się z rozdziałem 20, aby uzyskać pomoc dotyczącą tworzenia kont. Aby utworzyć pierwsze konto użytkownika, musisz zostać użytkownikiem systemu operacyjnego, pod którym zainstalowano PostgreSQL (zazwyczaj postgres). Może się również zdarzyć, że przypisano Ci nazwę użytkownika PostgreSQL, która różni się od nazwy użytkownika systemu operacyjnego; w takim przypadku musisz użyć przełącznika -U lub ustawić zmienną środowiskową PGUSER, aby określić nazwę użytkownika PostgreSQL

Do swoich celów możesz:

1) Utwórz konto użytkownika PostgreSQL:

sudo -u postgres createuser tom -d -P

( -Popcja ustawienia hasła; -dopcja pozwalająca na tworzenie bazy danych dla Twojej nazwy użytkownika „tom”. Zauważ, że „tom” to nazwa użytkownika systemu operacyjnego. W ten sposób możesz wykonywać polecenia PostgreSQL bez sudoingerencji).

2) Teraz powinieneś być w stanie wykonać createdbi inne polecenia PostgreSQL.

Rocky Inde
źródło
1

Miałem ten sam problem, po prostu to robię

sudo su - postgres

createuser odoo -U postgres -dRSP #P jako hasło ( odoo lub nazwa użytkownika , którą chcesz przyznać postgresowi)

Sagar T.
źródło
0

Jeśli nie chcesz zmieniać metody uwierzytelniania (ident) i zadzierać z pg_hba.conf, użyj tego:

Najpierw zaloguj się jako domyślny użytkownik

 sudo su - posgres

następnie wejdź do psql i utwórz użytkownika o takiej samej nazwie, jak ta, do której się logujesz

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

możesz zweryfikować swojego użytkownika z odpowiednimi rolami za pomocą

postgres=#  \du

Po tym możesz utworzyć swoją bazę danych i zweryfikować ją za pomocą

psql -d dbName
\l
\q
Eduardo Hernández
źródło
-4

Najpierw musisz uruchomić initdb. Utworzy klaster bazy danych i początkową konfigurację

Zobacz Jak skonfigurować postgresql po raz pierwszy? i http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
źródło
5
To jest całkowicie błędne. Gdyby użytkownik nie działał, initdbnie miałby serwera bazy danych działającego i przyjmującego połączenia w celu wygenerowania zgłoszonego komunikatu o błędzie. Usuń tę mylącą odpowiedź. (BTW, w przyszłości proszę linkować do / docs / current / static /, aby uniknąć gromadzenia się nieaktualnych linków)
Craig Ringer,