Доморощенный постгрес сломан
Я установил Postgresql 9.4.0, установленный на моем Mac (10.10.1/Yosemite), используя homebrew. Это не работает.
Я создал мягкую ссылку на /usr/local/opt/postgresql/homebrew.mxcl.postgresql.plist в ~/Library/LaunchAgents.
Если я пытаюсь загрузить postgres вручную, я получаю сообщение "Операция выполняется"
> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/Cellar/postgresql/9.4.0/homebrew.mxcl.postgresql.plist: Operation already in progress
Однако postgres не работает.
> ps auxw | grep post
billmcn 670 0.0 0.0 2424272 452 s000 R+ 10:12PM 0:00.01 grep post
и я не могу соединиться с клиентом командной строки.
> psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Насколько мне известно, я перепробовал все исправления, предложенные в других потоках Stackru, обсуждающих эту проблему. В частности:
- Я удалил и переустановил postgres и сопровождающий драгоценный камень Ruby. На моей машине нет версии postgres 8.0.
- Я убедился, что клиентская программа psql - это версия 9.4.0, установленная Homebrew, а не бинарный файл Mac.
- Я убедился, что /usr/local/var/postgres/postmaster.pid не существует.
- Я перезагрузил машину.
У меня действительно был Homegrew Postgres, работавший над этой машиной ранее. Я думаю, что сломало это обновление с версии 8 до версии 9, но я не уверен.
У меня нет баз данных, которые мне нужно сохранить. Я готов начать с postgres; Мне просто нужно заставить его работать сейчас. Есть идеи?
Похоже, проблема связана с разрешениями в каталоге / usr / local / var / postgres. Вот как выглядел мой каталог var, когда что-то не работало.
ll /usr/local/var/
drwxr-xr-x 3 billmcn admin 102 Dec 20 12:44 cache
drwxr--r-- 2 root admin 68 Dec 29 21:37 postgres
(whoami = "billmcn")
Я удалил /usr/local/var/postgres, удалил и переустановил postgres, и теперь это выглядит так.
ll /usr/local/var/
drwxr-xr-x 3 billmcn admin 102 Dec 20 12:44 cache
drwx------ 23 billmcn admin 782 Dec 30 10:51 postgres
Не уверен, как он попал в это состояние, потому что я не помню, чтобы он работал с разрешениями для этого каталога, но неважно. Это работает сейчас.
12 ответов
У меня была такая же проблема при установке postgres с помощью homebrew на только что установленном Yosemite.
Сначала мой конфиг brew выглядит так:
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: 9f6926265f8e4be7cc80dfe9042f2cd3c1e8dc9e
Last commit: 64 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit sandybridge
OS X: 10.10.1-x86_64
Xcode: 6.1.1
Clang: 6.0 build 600
X11: N/A
System Ruby: 2.0.0-481
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: ~/.rvm/rubies/ruby-2.1.1/bin/ruby
Первое, что я заметил, было то, что у меня не было разрешения на запись /usr/local/var/postgres
, Это было легко поменять выдавать sudo chown -R `whoami` /usr/local/var/postgres
Затем я переустановил postgresql и сделал
cat /usr/local/var/postgres/server.log
который показал:
postgres cannot access the server configuration file "/usr/local/var/postgres/postgresql.conf": No such file or directory
Поэтому я удалил каталог /usr/local/var/postgres
и выдал команду для инициализации базы данных.
initdb -D /usr/local/var/postgres/
Похоже, это сработало, и Postgres работает нормально.
У меня была такая же проблема. Основная проблема заключается в том, что на этапе установки initdb будет создан каталог с правами root, а не как пользователь на Mac. Чтобы решить эту проблему:
Создайте каталог данных перед запуском initdb
и установите разрешения 0700
rm -rf /usr/local/var/postgres # in case this is not your first try
mkdir /usr/local/var/postgres
chmod 0700 /usr/local/var/postgres
Тогда беги initdb
и это будет уважать разрешения каталога данных.
initdb -D /usr/local/var/postgres
Для ухмылок и хихиканья создайте тестовую базу данных с именем вашего пользователя:
createdb `whoami`
Войдите, чтобы проверить:
psql
После попытки установить postgresql с Homebrew я получил это:
Warning: postgresql-9.5.2 already installed, it's just not linked
Итак, я попробовал:
brew link postgresql
И получил эту ошибку:
Linking /usr/local/Cellar/postgresql/9.5.2...
Error: Could not symlink share/man/man3/SPI_connect.3
/usr/local/share/man/man3 is not writable.
Это казалось вопросом разрешения на запись, поэтому я сделал:
sudo chown -R `whoami` /usr/local/share/man/
Это добилось цели, потому что тогда я смог сделать (без ошибок):
brew link postgresql
Если кто-то обновил предыдущую версию, не забудьте:
brew postgresql-upgrade-database
Это решит проблему путем обновления существующих баз данных до версии, до которой вы обновили postgres.
Обратите внимание, что на github Homebrew есть тема, посвященная этой проблеме: https://github.com/Homebrew/homebrew/issues/35240
У меня была похожая проблема. Ответ Джеймса помог мне решить эту проблему. Но затем я столкнулся с проблемой, о которой упоминает jbk (после удаления / usr / local / var / postgres он продолжал создаваться заново).
Проблема в том, что если вы создали символическую ссылку:
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
и запустил процесс:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Вы должны сначала разгрузить это:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
до запуска команд Джеймса.
rm -rf /usr/local/var/postgres # in case this is not your first try
mkdir /usr/local/var/postgres
chmod 0700 /usr/local/var/postgres
Кроме того, если, как и я, у вас есть пользователь-администратор, управляющий homebrew, и обычный пользователь, который будет использовать pgsl для целей разработки, команду James следует запускать как суперпользователь:
sudo -s
и право собственности на каталог postgres должно быть передано вашему пользователю dev:
chown my-dev-user /usr/local/var/postgres
Следующая команда, запускаемая от имени пользователя dev, должна затем правильно заполнить каталог:
createdb `whoami`
Бег:
psql -l
После таких манипуляций должны отображаться таблицы и права пользователей в postgre.
Надеюсь это поможет.
Мне пришлось удалить
.pid
файл, увидев это в журналах
/usr/local/var/log/postgres.log
2021-10-10 19:05:27.468 BST [41868] FATAL: lock file "postmaster.pid" already exists
2021-10-10 19:05:27.468 BST [41868] HINT: Is another postmaster (PID 820) running in data directory "/usr/local/var/postgres"?
rm /usr/local/var/postgres/postmaster.pid
Я установил его с помощью варева
на основе ответа @James это то, что я сделал на своей машине M1 Monterey. Для меня каталог отличался.
В терминале:
#to fix postgresql of existing installation
cd /opt/homebrew/var
rm -rf postgres
mkdir postgres
chmod 0700 postgres
initdb -D postgres
#install postgres
echo "installing postgres..."
brew install postgresql
brew services restart postgresql
createuser postgres -s
тогда я мог
brew install --cask pgadmin4
и запустите pgadmin из приложений и подключитесь к 127.0.0.1.
У меня возникла эта проблема после выключения компьютера из-за отключения электроэнергии.
# This initialize your database with the current data and settings
initdb -D postgres
# This will start database service
pg_ctl -D postgres -l logfile start
У меня недавно была проблема, которая началась, когда я обновил некоторые обновления / обновления пивоварни, в основном версии Python и т. Д. Что сработало для меня.
brew uninstall postgres
brew install postgresql@9.5
echo 'export PATH="/usr/local/opt/postgresql@9.5/bin:$PATH"' > ~/.zshrc
# you may need > ~/.bashrc if you use bash
Мне нужны pg_dump, pg_restore и т. Д., Чтобы заставить эту работу я сделал
brew install libpq
Запустить сервис
brew services start postgresql@9.5
Отсюда я ожидал, что все будет работать, но все же все команды rails db выдают ошибку, что сервер не работает. Эта последняя часть была недостающим кусочком головоломки, которая, наконец, решила ее для меня.
gem uninstall pg
gem install pg -v 0.20.0 # which was set in Gemfile
# could also just probably do bundle install instead.
Для потомков у меня была эта проблема, и я хотел отметить, что сработало для меня.
Я запускаю postgres 11.2 на High Sierra. Я недавно обновился с postgres 10 с помощьюbrew postgresql-upgrade-database
.
Я продолжал получать ошибку psql: could not connect to server: No such file or directory
, и мой server.log указал is another postmaster (PID 5894) running in data directory "/usr/local/var/postgres"?
Я попробовал несколько решений, включая перезагрузку компьютера, удаление postmaster.pid
, с помощью brew services restart postgres
, но безрезультатно. В конце концов я наткнулся на решение:
brew unlink postgresql && brew link postgresql
Понятия не имею, почему это сработало, но помещаю это здесь в основном, чтобы я мог ссылаться на это сам в будущем! Бросайте что-нибудь в стену, пока оно не прилипнет
Проверьте @leo_chaz_maltrait для исправления ошибки ошибки Could not symlink share/man/man3/SPI_connect.3
Еще одна ошибка, которая может появиться:
Error: Could not symlink lib/pkgconfig/libecpg.pc
sudo chown -R `whoami` /usr/local/lib/pkgconfig
brew link postgresql
Пожалуйста, прочтите и следуйте инструкциям.
Проверять
postgres
журналы, чтобы увидеть, в чем проблема.-
tail -f /usr/local/var/log/postgres.log
-
tail -f /opt/homebrew/var/log/postgres.log
-
tail -f /usr/local/var/postgres/server.log
-
В моем случае это была ошибка.
-
2022-07-19 21:16:12.095 IST [2138] FATAL: data directory "/usr/local/var/postgres" has invalid permissions
-
[3472] FATAL: lock file "postmaster.pid" already exists
-
Добавлено необходимое разрешение, и проблема устранена.
-
sudo chown -R vikas /usr/local/var/postgres
-
rm /usr/local/var/postgres/postmaster.pid
-
Вот и все.