Не удается подключиться к postgresql на порту 5432

57

Я установил стек Bitnami Django , который включал PostgreSQL 8.4.

Когда я запускаю psql -U postgres , я получаю следующую ошибку:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

PG определенно работает, а файл pg_hba.conf выглядит так:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Что дает?

«Доказательство», что pg работает:

[email protected]:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
[email protected]:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
[email protected]:/home/assaf# 
    
задан Assaf Lavie 26.06.2011 в 14:21
источник

17 ответов

63

Эта проблема возникает из установки пакета postgres без номера версии. Хотя postgres будет установлено и будет правильной версией, скрипт для настройки кластера будет работать неправильно; это проблема упаковки.

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

Сначала очистите старую установку postgres. В настоящее время проблема заключается в 9.1, поэтому я предполагаю, что это то, что вы установили

sudo apt-get remove --purge postgresql-9.1

Теперь просто переустановите

sudo apt-get install postgresql-9.1

Обратите внимание на имя пакета с номером версии. НТН.

    
ответ дан Stewart 20.08.2013 в 01:54
17

Сообщение об ошибке относится к сокету Unix-домена, поэтому вам нужно настроить вызов netstat , чтобы не исключать их. Поэтому попробуйте без опции -t :

netstat -nlp | grep 5432

Я бы предположил, что сервер фактически прослушивает сокет /tmp/.s.PGSQL.5432 , а не /var/run/postgresql/.s.PGSQL.5432 , к которому пытается подключиться ваш клиент. Это типичная проблема при использовании пакетов PostgreSQL с ручной компиляцией или сторонних разработчиков на Debian или Ubuntu, потому что исходный по умолчанию для каталога сокетов в Unix-домене /tmp , но упаковка Debian меняет его на /var/run/postgresql .

Возможные обходные пути:

  • Используйте клиентов, поставляемых вашим сторонним пакетом (вызов /opt/djangostack-1.3-0/postgresql/bin/psql ). Возможно, вообще удалите пакеты, поставляемые Ubuntu (может быть сложно из-за других обратных зависимостей).
  • Исправить каталог сокетов стороннего пакета, совместимого с Debian / Ubuntu.
  • Используйте -H localhost для подключения через TCP / IP.
  • Используйте -h /tmp или эквивалентное значение PGHOST , чтобы указать на правый каталог.
  • Не используйте сторонние пакеты.
ответ дан Peter Eisentraut 27.06.2011 в 19:41
15

Вы можете использовать psql -U postgres -h localhost , чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; выход netstat показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.

Вы можете узнать, какой локальный сокет UNIX используется сервером PostgrSQL, используя другой invocavtion netstat :

netstat -lp --protocol=unix | grep postgres

В любом случае интерфейсы, на которых слушает сервер PostgreSQL, настроены в postgresql.conf .

    
ответ дан Riccardo Murri 26.06.2011 в 14:51
15

Просто создайте такую ​​программную ссылку:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
    
ответ дан Uriel 09.07.2012 в 03:35
12

Это работает для меня:

Изменить: postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Включить или добавить:

listen_addresses = '*'

Перезагрузите механизм базы данных:

sudo service postgresql restart

Кроме того, вы можете проверить файл: pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

И добавьте адрес своей сети или хоста:

host all all 192.168.1.0/24 md5     

ответ дан angelous 09.10.2014 в 15:17
5

Мне пришлось скомпилировать PostgreSQL 8.1 в Debian Squeeze, потому что я использую Project Open, основанный на OpenACS, и не буду работать в более поздних версиях PostgreSQL.

Конфигурация компиляции по умолчанию помещает unix_socket в /tmp , но Project Open, которая полагается на PostgreSQL, не будет работать, потому что она ищет unix_socket at /var/run/postgresql .

В настройке postgresql.conf установлена ​​настройка сокета. Моя проблема заключалась в том, что либо я мог установить /tmp и psql , но не проект открытым, или я мог бы установить его для /var/run/postgresql и psql не будет работать, но проект открыт.

Одно из решений проблемы заключается в том, чтобы установить сокет для /var/run/postgresql , а затем запустить psql , исходя из предложения Питера, как:

psql -h /var/run/postgresql

Это выполняется локально с использованием локальных разрешений. Единственным недостатком является то, что это больше набирает, чем просто «psql».

Другое предложение, которое кто-то сделал, - создать символическую связь между двумя местоположениями. Это также сработало, но ссылка исчезла при перезагрузке. Возможно, проще просто использовать аргумент -h, однако я создал символическую ссылку из сценария PostgreSQL в /etc/init.d . Я поместил символическую ссылку создать команду в разделе «Начало». Конечно, когда я выдаю команду «Стоп» и «Запустить или перезапустить», она попытается воссоздать существующую символическую ссылку, но, помимо предупреждения, там, вероятно, нет вреда.

В моем случае вместо:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

У меня

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

и явно установили unix_socket в /var/run/postgresql/.s.PGSQL.5432 в postgresql.conf .

    
ответ дан Joe 06.11.2012 в 04:22
4

Я заставляю его работать, делая это:

dpkg-reconfigure locales

и выберите предпочтительные локали

pg_createcluster 9.5 main --start

(9.5 - это моя версия postgresql)

/etc/init.d/postgresql start

, а затем он работает!

sudo su - postgres
psql
    
ответ дан mymusise 13.09.2016 в 11:05
3

Решение:

Сделайте это

export LC_ALL="en_US.UTF-8"

и это. ( 9.3 - моя текущая версия PostgreSQL. Напишите свою версию!)

sudo pg_createcluster 9.3 main --start
    
ответ дан bogdanvlviv 23.02.2016 в 22:47
1

В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf

Я изменил:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

в

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

Но MD5 должно было быть нижним регистром md5 :

# Database administrative login by Unix domain socket
local   all             postgres                                md5
    
ответ дан Mehdi Nellen 29.11.2016 в 11:15
0

При том же выпуске я попробовал что-то другое:

запуск вручную postgresql daemon Я получил:

  

FATAL: не удалось создать сегмент разделяемой памяти ... Чтобы уменьшить размер запроса (в настоящее время 57237504 байт), уменьшите использование разделяемой памяти PostgreSQL, возможно, путем сокращения shared_buffers или max_connections.

, так что я сделал, чтобы установить нижний предел для shared_buffers и max_connections в postgresql.conf и перезагрузка услуга.

Это исправлено!

PS: следует полный журнал ошибок

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.
    
ответ дан DrFalk3n 26.06.2013 в 15:29
0

Возможно, это произошло, потому что вы изменили разрешение папки /var/lib/postgresql/9.3/main . попробуйте изменить его на 700, используя команду ниже:

sudo chmod 700 main
    
ответ дан Farzin 06.11.2014 в 14:01
0

У меня была такая же проблема, о которой описал Питер Айзентраут. Используя команду netstat -nlp | grep 5432 , я мог видеть, что сервер прослушивал сокет /tmp/.s.PGSQL.5432 .

Чтобы исправить это, просто отредактируйте файл postgresql.conf и измените следующие строки:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

Теперь запустите service postgresql-9.4 restart (замените 9-4 своей версией), и теперь должны работать удаленные подключения.

Теперь, чтобы разрешить локальные подключения, просто создайте символическую ссылку в каталоге /var/run/postgresql .

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Не забудьте также правильно настроить pg_hba.conf .

    
ответ дан Justin Lessard 20.11.2015 в 17:44
0

Я пробовал все вышеперечисленное, пока не последовал за буквой.

Да, у меня была такая же проблема. (используя Ubuntu 15.10 (wily)) Sudo find / -name 'pg_hba.conf' -print или sudo find / -name 'postgresql.conf' -print оказался пустым. До этого казалось, что были установлены несколько экземпляров postgresql.

У вас может быть симулятор, когда вы видите, как установлено, или список проблем с ошибкой

... / PostgreSQL ... / PostgreSQL-9.x и т. д.

В этом случае вы должны sudo apt-get autoremove (каждый пакет 1 на 1)

Затем, следуя этому письму, и все будет хорошо. Особенно, когда речь идет о ключевом импорте и добавлении в исходный список FIRST

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

, если вы не используете хитрые изменения в своем выпуске. (вывод lsb_release -c)

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'

sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

END -

И тогда вы должны быть в порядке и иметь возможность подключаться и создавать пользователей.

OUTPUT

  Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5432

источник моих решений (кредитов) Ссылка

    
ответ дан Grmn 05.02.2016 в 17:43
0

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

Сначала отключите все параметры ведения журнала в postgresql.conf. Это раздел:

# ERROR REPORTING AND LOGGING

Прокомментируйте все в этом разделе. Затем перезапустите службу.

При перезапуске используйте /etc/init.d/postgresql start или restart Мне показалось, что при перезагрузке в режиме суперпользователя полезно. У меня было x-окно, открытое только для этой операции. Вы можете установить режим суперпользователя с sudo -i .

Убедитесь, что с этой простой командой можно связаться с сервером: psql -l -U postgres

Если это не исправить, рассмотрим следующее: При попытке найти решение я менял права собственности на многие папки. Я знал, что, вероятно, я попытаюсь вернуть эти владельцы папок и chmod еще на два дня. Если вы уже перепутали эти владельцы папок и не хотите полностью очищать свой сервер, тогда начните отслеживать настройки для всех затронутых папок, чтобы вернуть их в исходное состояние. Возможно, вы захотите попытаться выполнить параллельную установку на другой системе и систематически проверить права собственности и настройки всех папок. Заурядный, но вы можете получить доступ к своим данным.

Как только вы получите доступ, систематически измените каждую соответствующую строку в разделе # ERROR REPORTING AND LOGGING файла postgresql.conf . Перезапустите и проверьте. Я обнаружил, что папка по умолчанию для журналов вызывала сбой. Я специально прокомментировал log_directory . Папка по умолчанию, в которой система записывает журналы, равна /var/log/postgresql .     

ответ дан jurban1997 19.01.2017 в 02:34
0

Найдите свой файл:

sudo find /tmp/ -name .s.PGSQL.5432

Resut:

  

/tmp/.s.PGSQL.5432

Войдите как пользователь postgres:

su postgres

psql -h /tmp/ yourdatabase
    
ответ дан Waldeyr Mendes da Silva 30.01.2017 в 16:18
0

В моем случае все, что я должен был сделать, это следующее:

sudo service postgresql restart

, а затем

sudo -u postgres psql

Все прошло отлично. Надеюсь, поможет. Cheers :).

    
ответ дан Pranay Dugar 29.06.2017 в 19:21
0

Это может быть поздно, но я обнаружил, что удаление postgres звуков неубедительно. Это помогает решить мою проблему.

  

sudo systemctl start postgresql

Запуск сервера postgres.

  

sudo systemctl включить postgresql

Убедитесь, что сервер запускается при загрузке. Подробную информацию можно найти на сайте DigitalOcean Здесь.

    
ответ дан parlad neupane 01.02.2018 в 16:45