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


82

Я встановив стек 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:

root@assaf-desktop:/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
root@assaf-desktop:/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  
root@assaf-desktop:/home/assaf# 

Я поняття не маю, про що ви просите, і ви ніколи не надавали вклад. Це 100 людей, які отримують загальну помилку та повідомляють про різні речі. Це повністю не в форматі для сайту.
Еван Керролл

Відповіді:


87

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

Якщо вам комфортно, postgresє сценарій, який можна запустити, щоб створити цей кластер і розпочати postgresроботу. Однак є простіший спосіб.

Спочатку очистіть старі установки postgres. Проблема наразі полягає в 9.1, тому я вважаю, що це ви встановили

sudo apt-get remove --purge postgresql-9.1

Тепер просто перевстановіть

sudo apt-get install postgresql-9.1

Зверніть увагу на назву пакета з номером версії. HTH.


3
це допомогло мені з postgres 9.3.
sevenseacat

1
Це має бути прийнята відповідь, працює і з postgres 9.4 / ubuntu 14.10, також
Malte

1
ця відповідь допомогла мені у змішанні постгресів 9.4 та 9.3. Класно.
інго

2
Працював для ubuntu 16.04 та postgres 9.5, але довелося спочатку очистити кожен пов'язаний з postgres пакет.
Еверт

2
Це справді приголомшлива відповідь! А також жахливий досвід користувачів на сторінці postgres
user1952500

23

Повідомлення про помилку стосується сокета домену 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установку для вказівки на потрібний каталог.
  • Не використовуйте сторонні пакети.

19

Це працює для мене:

Редагувати: 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

the liste_address = '*' зробив трюк. він слухав лише на "localhost", а не на 127.0.0.1. спасибі!
mwm

мій боже ... нарешті щось працювало - нічого більше не працювало, поки я не додав адресу і не коментував liste_address.
AntonB

Плюс один! Це працювало для мене.
Атул Маквана

1
це працює на ubuntu windows bash.
ахмадалібалоч

Я можу підтвердити, що він працює на базі команд Ubuntu Server в Windows 10.
Рональд,

18

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

Ви можете дізнатися, який локальний сокет UNIX використовується сервером PostgrSQL, використовуючи інший виклик netstat :

netstat -lp --protocol=unix | grep postgres

У будь-якому випадку налаштовані інтерфейси, на яких прослуховується сервер PostgreSQL postgresql.conf.


17

Просто створіть таке посилання:

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

1
Це працювало для мене і, здавалося, було найпростішим рішенням без необхідності змінити вашу конфігурацію postgresql. Будьте впевнені, що ви користуєтеся надрукуванням, намагаючись зробити посилання.
бренда

2
ln: не вдалося створити символічне посилання '/var/run/postgresql/.s.PGSQL.5432': Файл існує
P_M

Я створив папку "postgresql" в / var / run / каталозі. Його не існувало.
Ikrom

Діє дивовижно, в чому причина цього?
Теоман шипахі

7

Я змушую це працювати, роблячи це:

dpkg-reconfigure locales

Виберіть потрібні локалі та запустіть

pg_createcluster 9.5 main --start

(9.5 - моя версія postgresql)

/etc/init.d/postgresql start

і тоді це працює!

sudo su - postgres
psql

Га, вибачте, я думаю, команди дали це зрозуміти. для мене я зіткнувся з цією проблемою, коли я перевстановлюю postgresql, я намагаюся перезапустити її за типом, service postgresql restart але, мовляв, у мене не було кластера postgresql. Тоді я знаходжу такий спосіб, щоб мені допомогти :)
mymusise

Через три години роботи в Google ви нарешті виправили мою проблему. dpkg-reconfigure localesдосить проклято важливо.
Дон Мами

5

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

Конфігурація компіляції по замовчуванням поміщає unix_socketв систему /tmp, але проект Open, який ґрунтується на PostgreSQL, не працюватиме , так як це виглядає для unix_socketна /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.


3

Рішення:

Зробити це

export LC_ALL="en_US.UTF-8"

і це. ( 9.3 - моя поточна версія PostgreSQL. Напишіть свою версію!)

sudo pg_createcluster 9.3 main --start

woooow, це було єдине рішення моєї проблеми, дякую.
користувач3687723

3

Якщо ваша служба Postgres працює без будь-якої помилки або немає помилки при запуску послуги Postgres, і все ж ви отримуєте згадану помилку, виконайте ці кроки

Крок 1. Запуск pg_lsclustersбуде перераховано всі кластери постгресів, що працюють на вашому пристрої

наприклад:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

швидше за все, статус буде знижено у вашій справі та поштовій службі

Крок 2: Перезапустіть pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgres
sudo service postgres restart

Крок 3: Крок 2 не вдався і помилка виникла

Якщо цей процес не вдався, він призведе до помилки. Ви можете бачити вхід із помилками/var/log/postgresql/postgresql-9.6-main.log

Моя помилка:

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Крок 4: перевірити право власності на postgres

Переконайтеся, що postgresце власник/var/lib/postgresql/version_no/main

Якщо ні, бігайте

sudo chown postgres -R /var/lib/postgresql/9.6/main/

Крок 5: Перевірте, що користувач postgres належить до групи користувачів ssl-cert

Виявилося, що я помилково видалив користувача Postgres із ssl-certгрупи. Запустіть код нижче, щоб виправити проблему групи користувачів та виправити дозволи

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

2

У моєму випадку це було спричинено помилкою друку, яку я зробив під час редагування /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

1
Це відповідь , який встановив її для мене :) я вже змінив міну trustedзамість trust, і не перезапустити службу, і він тільки зламав на наступний день , коли я вже забув , що я змінив
Phlippie Bosman

2

Я виявив, що видалення Postgres звучить непереконливо. Це допомагає вирішити мою проблему:

  1. Запустіть сервер postgres:

    sudo systemctl start postgresql
    
  2. Переконайтеся, що сервер запускається під час завантаження:

    sudo systemctl enable postgresql
    

Детальну інформацію можна знайти на сайті DigitalOcean Тут.


2

Не вдалося вирішити цю проблему з моїм сервером 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ще 2 дні. Якщо ви вже заблукали з тими правами власності на папки і не хочете повністю очистити ваш сервер, то починайте відстежувати налаштування для всіх папок, на які впливає вплив, щоб повернути їх до початкового стану. Ви можете спробувати зробити паралельну установку в іншій системі та систематично перевіряти право власності та параметри всіх папок. Стомлений, але ви можете отримати доступ до своїх даних.

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


1

Можливо, це могло статися, оскільки ви змінили дозволи /var/lib/postgresql/9.3/mainпапки.

Спробуйте змінити його на 700 за допомогою команди нижче:

sudo chmod 700 main

1

Це не зовсім пов’язано з питанням, оскільки я використовую Flask, але це була точна помилка, яку я отримував, і це була найбільш відповідна тема для отримання ідей.

Моя настройка: Підсистема Windows для Linux, Docker-композиція з файлом w / dockerfile, колба, Postgresql (за допомогою схеми, що складається з таблиць)

Щоб підключитися до постгресів, встановіть рядок з'єднання таким чином:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

ПРИМІТКА. У мене ніколи не було IP-адреси (наприклад, localhost, 127.0.0.1) для роботи будь-яким методом у цій темі. Ідея використання імені контейнера замість localhost прийшла звідси: https://github.com/docker-library/postgres/isissue/297

Встановіть схему:

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

Встановіть шлях пошуку для своїх функцій під час налаштування сеансу:

db.session.execute("SET search_path TO <schema_name>")

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також правильно налаштований.


0

У моєму випадку все, що я повинен був зробити:

sudo service postgresql restart

і потім

sudo -u postgres psql

Це спрацювало чудово. Сподіваюся, це допомагає. Ура :).



0

У мене була така ж проблема (на Ubuntu 15.10 (хитрий)). sudo find / -name 'pg_hba.conf' -printабо sudo find / -name 'postgresql.conf' -printвийшов порожнім. До цього здавалося, що встановлено кілька екземплярів postgresql.

Можливо, у вас буде подібне, коли ви бачите як встановлене, або проблеми з переліком залежностей

.../postgresql
.../postgresql-9.x 

і так далі.

У цьому випадку ви повинні sudo apt-get autoremoveкожен пакет 1 на 1.

Потім дотримуйтесь цього листа і ви будете добре. Особливо, коли мова йде про імпорт та додавання до списку джерел ПЕРШИЙ

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 -

Якщо ви не користуєтеся хитрою, замініть її wilyвипуском, тобто з виходомlsb_release -cs

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

І тоді вам повинно бути добре і мати можливість підключатися та створювати користувачів.

Очікуваний вихід:

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

Джерело моїх рішень (кредити)


0

Маючи те саме питання, я спробував щось інше:

Запустивши демона postgresql вручну, я отримав:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

Так що я зробив , щоб встановити нижню межу shared_buffersі max_connectionsв postgresql.confі на restartслужбі.

Це вирішило проблему!

Ось повний журнал помилок:

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

0

Після багатьох виснажливих спроб я знайшов рішення на основі інших постів!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres

0

Створіть каталог postgresql всередині запуску та виконайте наступну команду.

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

0

Просто додайте / tmp unix_socket_directories

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.