Как запустить сервер PostgreSQL в Mac OS X?

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:

Я забыл запустить команду initdb.

запустив эту команду

ps auxwww | grep postgres

Я вижу, что Postgres не работает

> ps auxwww | grep postgres
remcat          1789   0.0  0.0  2434892    480 s000  R+   11:28PM   0:00.00 grep postgres

возникает вопрос: как запустить сервер postgresql?

Обновить:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
sh: /usr/local/var/postgres/server.log: No such file or directory

обновление 2:

Касание не было успешным, поэтому я сделал это вместо:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/          
server.log

Но когда я пытаюсь запустить сервер rails, я все еще вижу это:

Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

обновление 3:

> pg_ctl -D /usr/local/var/postgres status
pg_ctl: no server running

обновление 4:

Я обнаружил, что там не было pg_hba.conf (только pg_hba.conf.sample), поэтому я изменил образец и переименовал его (чтобы удалить.sample). Вот содержимое:

 # IPv4 local connections:
 host    all             all             127.0.0.1/32           trust
 # IPv6 local connections:
 host    all             all             ::1/128                trust

но я не понимаю этого

> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start     
server starting
> pg_ctl -D /usr/local/var/postgres status                                     
pg_ctl: no server running

также:

sudo find / -name postgresql.conf
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory

обновление 5:

sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Password:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.

обновление 6:

это кажется странным

> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory

хотя я сделал это:

>sudo find / -name "*postgresql.conf*"
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample
/usr/share/postgresql/postgresql.conf.sample

поэтому я сделал это:

egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample 
#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)
                # supported by the operating system:
                #   %r = remote host and port

поэтому я попробовал это:

> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf        
> cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf 

по-прежнему получаю тот же "Сервер работает?" сообщение.

39 ответов

Решение

Диспетчер пакетов Homebrew включает списки launchctl для автоматического запуска. Для получения дополнительной информации запустите brew info postgres,

Начать вручную:

pg_ctl -D /usr/local/var/postgres start

Остановить вручную:

pg_ctl -D /usr/local/var/postgres stop

Начать автоматически:

Msgstr "Чтобы запустить, запустите postgresql сейчас и перезапустите при входе в систему:"

brew services start postgresql


Каков результат pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start?

Каков результат pg_ctl -D /usr/local/var/postgres status?

Есть ли какие-либо сообщения об ошибках в server.log?

Убедитесь, что локальные соединения tcp включены в pg_hba.conf:

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

Проверьте listen_addresses и порт в postgresql.conf:

egrep 'listen|port' /usr/local/var/postgres/postgresql.conf

#listen_addresses = 'localhost'     # what IP address(es) to listen on;
#port = 5432                # (change requires restart)

Убираться

Postgres, скорее всего, был установлен через Homebrew, Fink, MacPorts или установщик EnterpriseDB.

Проверьте вывод следующих команд, чтобы определить, с каким менеджером пакетов он был установлен:

brew && brew list|grep postgres
fink && fink list|grep postgres
port && port installed|grep postgres

Если вы хотите вручную запустить и остановить postgresql (установлен через homebrew), самый простой способ:

brew services start postgresql

а также

brew services stop postgresql

У меня была почти та же проблема, и вы назвали команду initdb исправлением. Это было также решением для меня, но я не видел, чтобы кто-то разместил это здесь, так что для тех, кто ищет это:

initdb /usr/local/var/postgres -E utf8

Если ваш компьютер был внезапно перезагружен

Во-первых, вы должны удалить файл /usr/local/var/postgres/postmaster.pid Затем вы можете перезапустить службу, используя один из многих других упомянутых методов, в зависимости от вашей установки.

Вы можете убедиться в этом, просмотрев журналы Postgres, чтобы увидеть, что может происходить: tail -f /usr/local/var/postgres/server.log

Другой подход заключается в использовании lunchy gem (обертки для launchctl):

brew install postgresql
initdb /usr/local/var/postgres -E utf8
gem install lunchy

Для запуска postgres:

lunchy start postgres

Чтобы остановить postgres:

lunchy stop postgres

Для получения дополнительной информации обратитесь к: " Как установить PostgreSQL на Mac с Homebrew и Lunchy"

Вот мои 2 цента: я создал псевдоним для postgres pg_ctl и поместил его в.bash_profile(моя версия postgresql - 9.2.4, а путь к базе данных - /Library/PostgreSQL/9.2/data).

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

Запустить новый терминал.

А потом? Вы можете запустить / остановить свой сервер postgresql с помощью этого:

postgres.server start
postgres.server stop

Самый простой способ запустить / остановить / перезапустить postgres, если вы установили его через brew это просто выгрузить и / или загрузить файл конфигурации launchd, который поставляется вместе с установкой:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Первая строка остановит postgres, а вторая строка запустит его. Нет необходимости указывать какие-либо каталоги данных и т. Д., Так как все находится в этом файле.

Чтобы запустить сервер postgresql:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

завершить работу сервера postgresql:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

Вы также можете создать псевдоним через CLI, чтобы упростить:

alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

С их помощью вы можете просто набрать "pg-start" для запуска Postgres и "pg-stop" для его выключения.

В тестовых целях, я думаю, PostgreSQL App - лучший вариант!

Запустите приложение, и сервер будет запущен. Закройте приложение, и сервер отключится.

http://postgresapp.com/

Если вы установили с помощью brew, ниже команды должно быть достаточно.

brew services restart postgresql

И это иногда может не сработать, в этом случае ниже две команды должны определенно работать

rm /usr/local/var/postgres/postmaster.pid

pg_ctl -D /usr/local/var/postgres start
   # remove old database files (If there was any)
   $rm -rf /usr/local/var/postgres    # install the binary

    $ brew install postgresql

    # init it
    $ initdb /usr/local/var/postgres

    # start the postgres server
    $ postgres -D /usr/local/var/postgres

    # create your database
    $ createdb mydb


    # Access db.
    $ psql mydb
    psql (9.0.1)
    Type "help" for help.

Иногда это просто та версия, которую вам не хватает, и вы без надобности чешете затылок.

Если вы используете конкретную версию PostgreSQL, например PostgreSQL 10, просто выполните

brew services start postgresql@10

brew services stop postgresql@10

Нормальный brew services start postgresqlне будет работать без версии, если вы установили ее для определенной версии с Homebrew.

Когда вы устанавливаете postgresql с помощью homebrew:

brew install postgres

в конце вывода вы увидите следующие методы запуска сервера:

To have launchd start postgresql at login:
    ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

Я думаю, что это лучший способ.

Вы можете добавить псевдоним в свой.profile для удобства.

Для быстрой одноразовой тестовой базы данных вы можете запустить сервер на переднем плане.

Инициализировать новую базу данных postgres в новом каталоге

mkdir db
initdb db -E utf8
createdb public

Запустите сервер на переднем плане (Ctrl-C, чтобы остановить сервер)

postgres -d db

В другом сеансе оболочки подключитесь к серверу

psql -d public

У меня та же проблема, и я выполняю все обновления из первого поста. Но после проверки файла журнала:

/usr/local/var/postgres/server.log

Я вижу истинную причину:

FATAL:  data directory "/usr/local/var/postgres" has group or world access
DETAIL:  Permissions should be u=rwx (0700).

После изменения разрешения на этот каталог

chmod 0700 /usr/local/var/postgres

у сервера postgres есть старт

Каждый раз проверяйте файл журнала.

Вариация этого ответа: /questions/22937769/kak-zapustit-server-postgresql-v-mac-os-x/22937786#22937786

initdb `brew --prefix`/var/postgres/data -E utf8`

Если вы не устанавливали его с помощью Homebrew и непосредственно из пакета Mac, это сработало для меня для PostgreSQL 12 при использовании всех местоположений по умолчанию, переменных и т. Д.

$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/12/bin/pg_ctl -D /Library/PostgreSQL/12/data/ stop

PostgreSQL интегрирован в Server.app, доступный через App Store в Mountain Lion. Это означает, что он уже настроен, и вам нужно только запустить его, а затем создать пользователей и базы данных.

Совет: не начинайте с определения $PGDATA и т. Д., Используйте расположение файлов как есть.

Вы должны иметь этот файл:/Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

Начать:

sudo serveradmin start postgres

Процесс начался с аргументов:

/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Библиотека / Сервер / PostgreSQL / Данные -c listen_addresses=127.0.0.1,::1 -c log_connections=on -c log_directory=/ Библиотека / Журналы /PostgreSQL -c log_filename=PostgreSQL.log -c log_line_prefix=%t -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/private/var/pgsql_socket -c unix_socket_g_set_set_c_7_7

Вы можете sudo:

sudo -u _postgres psql template1

Или подключите:

psql -h localhost -U _postgres postgres

Вы можете найти каталог данных, версию, текущее состояние и т. Д. С

sudo serveradmin fullstatus postgres  

Это сработало для меня (macOS 10.13)sudo -u postgres /Library/PostgreSQL/9.6/bin/pg_ctl start -D /Library/PostgreSQL/9.6/data

или первый cd /Library/PostgreSQL/9.6/bin/

  • установить postgresql с помощью brew:brew install postgresql, версию можно указать с помощью знака "@":brew install postgresql@14
  • запустить постгрескл:brew services start postgresqlили конкретная версияbrew services start postgresql@14
  • остановить постгрескл:brew services stop postgresql

В целях разработки одним из самых простых способов является установка Postgres.app с официального сайта. Его можно запустить / остановить из папки "Программы" или с помощью следующих команд в терминале:

# start
open -a Postgres

# stop
killall Postgres
killall postgres

Домашнее пиво - это способ!!

Чтобы запустить службу:

brew services start postgresql

Чтобы перечислить это:

brew services list | grep postgres

Чтобы остановить службу:

brew services stop postgresql

Если вы не устанавливали сервер Postgres с Homebrew или устанавливали его с помощью файла .dmg, попробуйте следующее:

      $ sudo su postgres
bash-3.2$ /Library/PostgreSQL/13/bin/pg_ctl -D /Library/PostgreSQL/13/data/ stop

Если вы установили Postgres с помощью установщика EnterpriseDB, то, что предложил @Kenial, это путь.

sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

установив Postgres с homebrew это то, что я делаю, чтобы запустить postgres и оставить его на переднем плане для просмотра журналов:

      /opt/homebrew/opt/postgresql/bin/postgres -D /opt/homebrew/var/postgres

$ brew upgrade postgres

исправил это для меня.

Это, конечно, обновит вашу версию postgres и обновит / установит все зависимости. ВНИМАНИЕ: Делайте это, зная, что ваша версия postgresql, вероятно, изменится. Для меня это не имело большого значения.

Для macports просто используйте команду load/unload и имя порта работающего сервера:

sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

так что вам не нужно помнить, где /Library/LaunchDaemons/org.macports.postgresql96.plist файл находится

Ни один из приведенных выше ответов не помог мне решить проблему, несмотря на то, что я получал те же сообщения об ошибках. Я смог восстановить и запустить свой экземпляр, удалив существующий файл postmaster.pid, который был заблокирован и не разрешал подключения.

После выполнения сервисов brew перезапустите postgresql.

Лучше всего работает: сервисы brew остановить postgresqlbrew postgresql-upgrade-database сервисы brew запустить postgresql

Затем введите: psql

теперь он запускается, это было после ошибки:psql: error: не удалось подключиться к серверу: нет такого файла или каталога. Сервер работает локально и принимает соединения через сокет домена Unix "/tmp/.s.PGSQL.5432"?

Обновление может быть необязательным в зависимости от других зависимостей ваших запущенных.

Это означает, что вместо перезапуска с помощью brew for in в mac os полностью остановите postgres, а затем запустите postgres и подключитесь к вашему psql databaseName.

Надеюсь, это было полезно.

Это работало для меня каждый раз, вдохновленный Крейгом Рингером:

brew install proctools
sudo pkill -u postgres

proctools включает в себя pkill. Если у вас нет Brew: https://brew.sh/

Другие вопросы по тегам