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 призначений на пг. Я можу зв'язатись

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 або Pg homebrew та підключення до тієї, psqlщо постачається з ОС. Мало того, що у них іноді є різні порти за замовчуванням, але у Pg, який постачається з Mac OS X, є інший шлях до роз'єму unix за замовчуванням , так що навіть якщо сервер працює на одному порту, він не буде слухати той же сонікс-сокет.

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

Ви також можете вказати каталог Unix socket; перевірити unix_socket_directoriesналаштування екземпляра PostgreSQL, до якого ви хочете підключитися, і вкажіть це psql -h, наприклад, наприклад psql -h /tmp.

Більш чистим рішенням є виправлення вашої системи PATHтаким чином, що psqlта, libpqпов’язане з PostgreSQL, який ви насправді виконуєте, - це те, що знайдено першим у PATH. Деталі цього залежать від вашої версії Mac OS X та пакетів Pg, які ви встановили. Я не використовую Mac і не можу запропонувати набагато більше деталей з цього боку, не витрачаючи більше часу, ніж зараз є.


23

Швидка відповідь на OSX, встановити змінні середовища.

>export PGHOST=localhost

>export PGPORT=5432

Або все, що вам потрібно.


16

Порт Postgres за замовчуванням зазвичай налаштований у:

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

Для Ubuntu це може бути:

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

Шукайте portу цьому файлі.


На 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

Я використовував 5432 і 5433 протягом тривалого часу, я бачив 5436, але не маю уявлення, чи це просто хтось творчість чи якийсь дефолт на різних ОС
Дейл

3

Я також зіткнувся з цією проблемою, і в кінцевому підсумку у мене працювали два сервери postgres одночасно. Я видалив один з них і змінив порт назад на 5432 і працює нормально.


2

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


Все, що це робить, дозволяє вам підключитися до сервера, який вже працює на 5432, тому ви могли підключитися після цього. Сервер працює на 5432 за вашу установку, як ви правильно сказали.
Шейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.