Как запустить PostgreSQL-сервер в Mac OS X? - программирование

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

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

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

</FINAL UPDATE>

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

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 

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

4b9b3361

Ответ 1

Диспетчер пакетов 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

Ответ 2

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

brew services start postgresql

и

brew services stop postgresql

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Другой подход заключается в использовании 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 "

Ответ 6

Здесь мои 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

Ответ 7

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

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

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

Ответ 8

Чтобы запустить сервер 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", чтобы закрыть его.

Ответ 9

В целях тестирования я считаю, что приложение PostgreSQL - лучший вариант!

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

http://postgresapp.com/

Ответ 10

когда вы устанавливаете 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 для удобства.

Ответ 11

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

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

mkdir db
initdb db -E utf8
createdb public

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

postgres -d db

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

psql -d public

Ответ 12

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

/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 запущен.

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

Ответ 13

Вариация этого ответа: fooobar.com/questions/12561/...

initdb 'brew --prefix'/var/postgres/data -E utf8'' &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start

Ответ 14

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/Library/Сервер/PostgreSQL/Данные -c listen_addresses = 127.0.0.1,:: 1 -c log_connections = on -c log_directory =/Library/Журналы/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_group = _postgres -c unix_socket_permissions = 0770

Вы можете sudo:

sudo -u _postgres psql template1

Или подключиться:

psql -h localhost -U _postgres postgres

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

sudo serveradmin fullstatus postgres  

Ответ 15

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

# start
open -a Postgres

# stop
killall Postgres
killall postgres

Ответ 16

   # 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.

Ответ 17

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

brew services restart postgresql

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

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

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

Ответ 18

$ brew upgrade postgres

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

Это, конечно же, обновит вашу версию postgres и обновит/установит любые зависимости. ПРЕДУПРЕЖДЕНИЕ: знайте, что ваша версия postgresql, скорее всего, изменится. Для меня это не было большой проблемой.

Ответ 19

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

Ответ 20

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

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

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

Ответ 22

Если вы установили 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

Ответ 23

Для Mac/OSX мне очень нравится LaunchRocket для этого и других фоновых сервисов, которые я использовал в разработке.

https://github.com/jimbojsb/launchrocket

На этом сайте есть хорошие инструкции по установке: http://macappstore.org/launchrocket/

Это дает вам хороший экран в ваших системных настройках, который позволяет запускать, перезагружать, запускать root при запуске.

Ответ 24

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

brew install proctools
sudo pkill -u postgres

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

Ответ 26

Есть некоторые крайние случаи, которые, возможно, будут полезны для кого-то:

Существует вариант, что у вас будет postgres.pid, заполненный некоторым PID. Но если вы перезагрузите компьютер, и до того, как postgress вернется снова, какой-то другой процесс примет этот PID. Если это произойдет, и pg_ctl status, и служба brew, спросив о статусе postgres, сообщат вам, что это UP. Просто PS AUX | grep и проверь, действительно ли это postgress

Ответ 27

это сработало для меня (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/