Jestem nowicjuszką postgres.
Zainstalowałem postgres.app dla Mac. Bawiłem się poleceniami psql i przypadkowo upuściłem bazę danych postgres. Nie wiem co w tym 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
Z tego się drukuje 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)
Jakie więc kroki powinienem podjąć? Usunąć wszystko związane z psql i ponownie zainstalować wszystko?
Dzięki za pomoc chłopaki!
macos
postgresql
terminal
użytkownik805981
źródło
źródło
brew services start postresql
.Odpowiedzi:
UWAGA: Jeśli zainstalowałeś postgres za pomocą homebrew, zobacz komentarz od @ user3402754 poniżej.
Zauważ, że komunikat o błędzie NIE mówi o brakującej bazie danych, mówi o brakującej roli. Później podczas logowania może również natknąć się na brakującą bazę danych.
Ale pierwszym krokiem jest sprawdzenie brakującej roli: jaka jest wydajność
psql
polecenia\du
? W moim systemie Ubuntu odpowiednia linia wygląda następująco:Jeśli nie ma co najmniej jednej roli
superuser
, masz problem :-)Jeśli istnieje, możesz użyć go do zalogowania się. I patrząc na wyjściu Twojego
\l
polecenia: Uprawnienia dlauser
natemplate0
itemplate1
baz danych są takie same jak w moim systemie Ubuntu dla superużytkownikapostgres
. Myślę więc, że twoja prosta konfiguracja używauser
jako superużytkownika. Aby wypróbować to polecenie, należy się zalogować:Jeśli
user
naprawdę jest superużytkownikiem DB, możesz utworzyć dla niego innego superużytkownika DB i prywatną, pustą bazę danych:Ale ponieważ wydaje się, że twoja konfiguracja postgres.app tego nie robi, ty też nie powinieneś. Prosta adaptacja samouczka.
źródło
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
używam postgres v10.homebrew
, musisz uruchomić/usr/local/opt/postgres/bin/createuser -s postgres
na swoim terminalu/usr/local/opt/postgresql/bin/createuser -s postgres
/usr/local/opt/postgresql@11/bin/createuser -s postgres
Kluczem jest „Zainstalowałem postgres.app dla systemu Mac”. Ta aplikacja konfiguruje lokalną instalację PostgreSQL z superużytkownikiem bazy danych, którego rola jest taka sama jak nazwa użytkownika (krótka).
Niektóre skrypty (np. Kopia zapasowa bazy danych utworzona
pgdump
na systemie Linux) i tutoriale zakładają, że superużytkownik ma tradycyjną nazwę rolipostgres
.Możesz sprawić, by lokalna instalacja wyglądała nieco bardziej tradycyjnie i uniknęła tych problemów, wykonując jeden raz:
co sprawi, że te FATAL: rola „postgres” nie istnieje, zniknie.
źródło
/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres
(oczywiście dla wersji 9.2.4)./Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres
działał dla mnie poprawnie.brew link postgresql
po instalacji, nie musisz dołączać całej ścieżkicreateuser
, prostycreateuser -s postgres
zadziała świetniecreateuser -s postgres
pracował dla mnie. Zainstalowałem postgres z HomebrewDla Maca:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
lub/usr/local/opt/postgres/bin/createuser -s postgres
który po prostu użyje najnowszej wersji.pg_ctl -D /usr/local/var/postgres start
Aby uruchomić serwer przy uruchomieniu
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ę
psql -U postgres -h localhost
lub użyj PgAdmin dla GUI.Domyślnie użytkownik
postgres
nie będzie miał hasła logowania.Sprawdź tę stronę, aby znaleźć więcej takich artykułów: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
źródło
brew services start postgresql
aby uruchomić postgreslub postgresl superużytkownika
źródło
Dzieje się tak, gdy uruchamiasz
initdb
użytkownika, którego ID nie jestpostgres
, bez podawaniapostgres
nazwy użytkownika za pomocą--username=postgres
lub-U postgres
.Klaster bazy danych jest następnie tworzony przy użyciu konta użytkownika systemu, którego użyto do uruchomienia initdb, i otrzymuje uprawnienia administratora.
Aby to naprawić, po prostu utwórz nowego użytkownika o nazwie
postgres
z opcją--superuser
za pomocącreateuser
narzędzia dostarczonego z Postgres. Narzędzie można znaleźć w katalogu Postgresbin
. na przykładJeśli masz niestandardową nazwę hosta lub port, ustaw odpowiednie opcje .
Nie zapomnij usunąć drugiego konta użytkownika, które zostało utworzone dla Ciebie przez initdb.
źródło
Dla mnie ten kod działał:
pochodzi stąd: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
źródło
Musiałem rozbroić
$PGUSER
:źródło
Najpierw musisz utworzyć użytkownika:
Po utworzeniu bazy danych:
Zmień
$USER
nazwę użytkownika systemu.Kompletne rozwiązanie można zobaczyć tutaj .
źródło
Uruchomienie tego w wierszu poleceń powinno to naprawić
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
źródło
Usunięcie
postgres
bazy danych nie ma tak naprawdę znaczenia. Ta baza danych jest początkowo pusta, a jej celem jest po prostu, abypostgres
użytkownik miał rodzaj „domu”, z którym mógłby się połączyć, gdyby był potrzebny.Nadal możesz go odtworzyć za pomocą polecenia SQL
CREATE DATABASE postgres;
Pamiętaj, że samouczek wymieniony w pytaniu nie został napisany z
postgres.app
myślą o nim. W przeciwieństwie do PostgreSQL dla Unixa,postgres.app
próbuje wyglądać jak normalna aplikacja, w przeciwieństwie do usługi, która byłaby uruchomiona przez dedykowanegopostgres
użytkownika mającego inne uprawnienia niż zwykły użytkownik.postgres.app
jest prowadzony i zarządzany przez twoje własne konto.Więc zamiast tego polecenia:
sudo -u postgres psql -U postgres
w duchu postgres.app wystarczy po prostu wydać:,psql
który automatycznie łączy się z bazą danych pasującą do nazwy użytkownika i kontem db o tej samej nazwie, które akurat jest superużytkownikiem, więc może zrobić wszystko pod względem uprawnień.źródło
ERROR: cannot drop the currently open database
pojawia się błąd, gdy próbuję usunąć bazę danych użytkownika? Więc czy nie jest dobrą praktyką korzystanie z tego postgres.app?Postgres.app
służy do celów testowych i programistycznych; jest to pakiet PostgreSQL od Heroku, zaprojektowany, aby ułatwić użytkownikom komputerów Mac rozwijających się z Ruby on Rails, aby testować z PostgreSQL zamiast domyślnego SQLite. Zastosowania Railsów miały tendencję do testowania SQLite i wdrażania na PostgreSQL, co powodowało różnego rodzaju problemy, więc Heroku starało się ułatwić testowanie również na PostgreSQL.Postgres.app
nadaje się do testowania, ale nie zastanawiałbym się nad użyciem go do danych produkcyjnych lub rzeczywistych, po prostu nie do tego służy.Jeśli chodzi o to, co jest warte, mam zainstalowane Ubuntu i wiele pakietów, co spowodowało konflikt.
Dla mnie właściwą odpowiedzią było:
źródło
To jedyny, który to naprawił dla mnie:
źródło
sudo
uzyskać tymczasowe uprawnienia administratora.W systemie Ubuntu oczyściłem PostgreSQL i ponownie go zainstalowałem. Wszystkie bazy danych zostaną przywrócone. To rozwiązało problem dla mnie.
Rada - weź kopię zapasową baz danych, aby być bezpieczniejszym.
źródło
Nie sądzę, że sudo jest tutaj potrzebne, ponieważ psql -l zwraca listę baz danych. Mówi mi to, że initdb był uruchamiany przez bieżącego użytkownika, a nie przez użytkownika postgres.
Możesz po prostu:
I kontynuuj samouczek.
Sugerowałbym ogólne punkty AH dotyczące tworzenia postgres użytkownika i bazy danych, ponieważ wiele aplikacji może oczekiwać, że tak będzie.
Krótkie wyjaśnienie:
PostgreSQL nie będzie działał z dostępem administracyjnym do systemu operacyjnego. Zamiast tego działa ze zwykłym użytkownikiem, a w celu obsługi uwierzytelnienia równorzędnego (pytając system operacyjny, który próbuje się połączyć) tworzy użytkownika i db z użytkownikiem uruchamiającym proces inicjalizacji. W tym przypadku był to zwykły użytkownik.
źródło
Utknąłem w tej sprawie, wykonując
brew services stop postgresql
dzień wcześniej.Następnego dnia:
brew services start postgresql
nie zadziała. Wynika to z faktu, jak pokazano podczas instalacji za pomocą Homebrew. postgresql używa wersji uruchomionej ..., która ładuje się, gdy komputer jest włączony.rozkład:
brew services start postgresql
Uruchom ponownie komputer.
źródło
\du
Powrót polecenie:I ten
postgres=# \password postgres
błąd zwraca polecenie :Ale to
postgres=# \password postgres@implicit_files
działa dobrze.Również po
sudo -u postgres createuser -s postgres
pierwszym wariancie działają również.źródło