путаница портов postgresql 5433 или 5432?

Я установил postgresql на OSX. Когда я запускаю psql, я получаю

$ 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.5433"?

однако, из /etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 занято Пирро, 5432 назначено на стр. Я могу связаться с

psql -p 5432

но почему psql думает, что это 5433 и как я могу заставить psql выглядеть в нужном месте по умолчанию?

7 ответов


/etc/services является только консультативным, это список известных портов. Это не означает, что что-либо действительно работает на этом порту или что именованная служба будет работать на этом порту.

в случае PostgreSQL обычно используется порт 5432, если он доступен. Если это не так, большинство установщиков выберет следующий свободный порт, обычно 5433.

вы можете увидеть, что на самом деле работает с помощью netstat инструмент (доступен в OS X, Windows и Linux, с синтаксисом командной строки разной во всех трех).

это еще больше усложняется в системах Mac OS X ужасным беспорядком различных пакетов PostgreSQL-древней версии Apple PostgreSQL, встроенной в ОС Postgres.app, Homebrew, Macports, установщик EnterpriseDB и т. д.

в конечном итоге происходит то, что пользователь устанавливает Pg и запускает сервер из одной упаковки, но использует psql и libpq клиент из другой упаковки. Обычно это происходит, когда они используется Postgres.app или homebrew Pg и подключение с psql который поставляется с ОС. Они не только иногда имеют разные порты по умолчанию, но и Pg, поставляемый с Mac OS X, имеет другой путь сокета unix по умолчанию, так что даже если сервер работает на том же порту, он не будет слушать тот же сокет Unix.

большинство пользователей Mac работают вокруг этого, просто используя tcp / ip с psql -h localhost. Вы также можете указать порт, если это необходимо, например psql -h localhost -p 5433. Вы возможно, работает несколько экземпляров PostgreSQL, поэтому убедитесь, что вы подключаетесь к правильному, используя select version() и SHOW data_directory;.

вы также можете указать каталог сокетов unix; проверьте unix_socket_directories настройка экземпляра PostgreSQL, к которому вы хотите подключиться, и укажите это с помощью psql -h, например,psql -h /tmp.

более чистое решение-исправить вашу систему PATH так что psql и libpq связанный с PostgreSQL, который вы фактически используете, это то, что найдено сначала на PATH. Подробности этого зависят от версии Mac OS X и установленных пакетов Pg. Я не использую Mac и не могу предложить гораздо больше деталей на этой стороне, не тратя больше времени, чем в настоящее время доступно.


быстрый ответ на OSX, установите переменные среды.

экспорт PGHOST=localhost

экспорт PGPORT=5432

или все, что вам нужно.


ПОРТ По умолчанию Postgres обычно настраивается в:

sudo vi /<path to your installation>/data/postgresql.conf

на Ubuntu это может быть:

sudo vi /<path to your installation>/main/postgresql.conf

искать port в этот файл.


кажется, что одной из наиболее распространенных причин этого является установка новой версии PostgreSQL без остановки службы существующей установки. Это была моя особая головная боль. Перед установкой или обновлением, особенно в OS X и с помощью установщика one click из Enterprise DB, убедитесь,что вы проверили состояние старой установки перед продолжением.


спасибо @a_horse_with_no_name ' s комментарий, Я изменил определение PGPORT на 5432 в pg_env.sh - ... Это решило проблему для меня. Я не знаю, почему postgres установил его как 5433 изначально, когда он размещал службу в 5432.


Я также столкнулся с этой проблемой, в итоге у меня было два сервера postgres, работающих одновременно. Я удалил один из них и изменил порт обратно на 5432 и теперь работает нормально.


для меня pgAdmin попробуйте 4 on Mac OS High Sierra, нажмите PostrgreSQL10 база данных в разделе сервера в левом столбце, затем свойства tab, showed 5433 как порт под подключение. (Я не знаю, почему, потому что я выбрал 5432 во время установки). Во всяком случае, я нажал редактировать под свойства tab, измените это на 5432, спасли, и это решило проблему. Иди разберись.