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

128

Я установил 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 - pg. Я могу связаться с

psql -p 5432

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

высокая пропускная способность
источник
5
Проверьте, определена ли переменная окружения PGPORT: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Ответы:

187

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

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

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

Это еще больше усложняется в системах Mac OS X ужасным беспорядком различных пакетов PostgreSQL - древней версии PostgreSQL от Apple, встроенной в ОС, 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 и не могу предоставить более подробную информацию об этой стороне, не потратив больше времени, чем доступно в настоящее время.

Крейг Рингер
источник
24

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

>export PGHOST=localhost

>export PGPORT=5432

Или что вам нужно.

DavidLStacy
источник
16

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

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

В Ubuntu это может быть:

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

Ищите portв этом файле.

Risadinha
источник
В Mac OSX с дистрибутивом BigSQL он находится здесь:~/PostgreSQL/data/pg96
Шейн
7

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

высокая пропускная способность
источник
7

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

Эрон Ллойд
источник
Да, мы установили postgresql-9.5, когда 9.4 уже была установлена, поэтому 9.5 выбрал 5433 в качестве порта по умолчанию
vikingsteve 02
Я использовал 5432 и 5433 в течение долгого времени, я видел 5436, но понятия не имею, это просто творчество кого-то или какое-то значение по умолчанию на разных ОС.
Deil
3

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

Krazzzeee
источник
2

Для меня в PgAdmin 4 в Mac OS High Sierra , щелкнув базу данных PostrgreSQL10 в разделе « Серверы» в левом столбце, затем на вкладке « Свойства », отобразился 5433 как порт в разделе « Подключение» . (Не знаю почему, потому что при установке я выбрал 5432). В любом случае, я щелкнул значок « Изменить» на вкладке « Свойства », изменил его на 5432 , сохранил, и это решило проблему. Иди разберись.

Алан Симпсон
источник
Все, что это делает, это позволяет вам подключиться к серверу, уже работающему на 5432, поэтому вы можете подключиться после этого. Как вы правильно заявили, сервер работал на 5432 согласно вашей установке.
Шейн