Чи працює сервер на хості “localhost” (:: 1) і приймає з'єднання TCP / IP через порт 5432?


86

Перш за все, зауважте, що я знайшов кілька подібних запитань щодо переповнення стеку та статей по всьому Інтернету, але жодне з них не допомогло мені вирішити проблему:

Ось проблема:

  • У мене є програма Rails, яка працює як шарм.
  • Зі своїм співробітником ми використовуємо GitHub для спільної роботи.
  • У нас masterє mvpгілки і.
  • Нещодавно я оновив свою gitверсію за допомогою Homebrew (Mac).
  • Ми використовуємо Foreman, щоб запустити наш додаток локально.

Тепер, коли я намагаюся запустити програму локально, я отримую таку помилку:

PG::ConnectionBad at /
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

Я кілька разів намагався перезавантажити комп’ютер.

Я також перевірив вміст /usr/local/var/postgres:

PG_VERSION      pg_dynshmem     pg_multixact    pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify       pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot     pg_stat_tmp     pg_xlog         server.log
pg_clog         pg_logical      pg_serial       pg_subtrans     postgresql.auto.conf

Як бачите, там немає postmaster.pidфайлу.

Будь-яка ідея, як я можу це виправити?


Чи можете ви оновити запитання змістом postgresql.conf?
Паван

Відповіді:


57

Швидше за все, у вас закінчився заряд акумулятора, і ваш сервер postgresql неправильно вимкнувся.

Найпростіший обхідний шлях - завантажити офіційний додаток postgresql і запустити його: це змусить сервер запуститися ( http://postgresapp.com/ )


2
Дякую за вашу відповідь. Я щойно завантажив додаток і запустив його. Якщо я вимкнув його перед запуском сервера, то все одно отримую ту саму помилку. Якщо я не вимикаю його, то я отримую повідомлення про помилку, в якому зазначається, що моя "база даних не існує". Чи це може бути пов’язано?
Тібо Клемент

Якщо ваша база даних не існує, вам слід запустити rake db: create. Але це, швидше за все, не пов’язано ... Ви щойно розгалужили репо чи щось подібне? Не слід вимикати його перед запуском сервера за допомогою 'rails s' !! Додаток повинен працювати весь час, коли ви хочете отримати доступ до свого сайту на локальному хості
Грем Слік

Гаразд. Ні, я не розгалужував репо, це те саме репо, з яким я працював. Але я побіг git fetch, можливо, проблема в цьому.
Тібо Клемент

git fetch не повинен видаляти базу даних. Що станеться, якщо запустити rake db: create?
Грем Слік

1
"Вичерпався акумулятор" ... сталося саме це! : -O
Сагар Ранглані

135

запустити, postgres -D /usr/local/var/postgresі ти повинен побачити щось на зразок:

 FATAL:  lock file "postmaster.pid" already exists
 HINT:   Is another postmaster (PID 379) running in data directory "/usr/local/var/postgres"?

Тоді біжи kill -9 PID підказку

І вам повинно бути добре їхати.


4
Найкраще рішення для мого випадку - це те, що моя машина несподівано вимкнулася, і перезапуск служби не вирішив проблему - дякую!
Пол Нелліган,

3
Якщо ви використовуєте доморощену мову, brew services start postgresабо можете brew services restart postgresзробити трюк
Mirror318

1
Дякую! Я вдруге зіткнувся з цим питанням, як ви зрозуміли, що це буде рішенням?
qasimalbaqali

1
Будь-яке рівноцінне рішення для Linux ubuntu dist?
tito.300,

1
Це спрацювало для мене у 2019 році після годинних спроб вирішити проблему.
Мвангі Кабіру,

54

Швидше за все, це тому, що ваша система несподівано вимкнена

Спробуйте

postgres -D /usr/local/var/postgres

Ви можете побачити

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 449) running in data directory "/usr/local/var/postgres"?

Тоді спробуй

kill -9 PID

приклад

kill -9 419

І це повинно починати postgres нормально


Так, моя система несподівано вимкнулася, і це вирішило мою проблему. Дякую.
Developine

24

Можливо, сервер postgresql не працює, і рішення може бути таким же простим, як запуск:

sudo service postgresql start

який вирішив проблему для мене.


16

У мене була майже така сама помилка з моєю програмою Ruby on Rails, що працює під керуванням postgresql (mac). Це спрацювало для мене:

brew services restart postgresql

14

У моєму випадку це спрацювало:

brew uninstall postgresql
rm -fr /usr/local/var/postgres/
brew install postgresql

14

Це може бути спричинено файлом pid, створеним для postgres, який не був видалений через несподіване вимкнення. Щоб виправити це, видаліть цей файл pid.

  1. Знайдіть каталог даних postgres. На MAC, що використовує доморощену мову /usr/local/var/postgres/, це може бути, інші системи це може бути/usr/var/postgres/

  2. Видаліть файл pid, запустивши:

    rm postmaster.pid
    
  3. Перезапустіть постгрес. На Mac запустіть:

    brew services restart postgresql
    

Дякую! Особисто мені довелося видалити таким чином: rm / Users / <ім'я користувача> / Library / Application \ Support / Postgres / var- <versionId> /postmaster.pid
Ніколас Боден-Ріперт,

3

Я вирішив проблему за допомогою цієї команди

pg_ctl -D /usr/local/var/postgres start

Іноді ви можете отримати цю помилку

pg_ctl: another server might be running; trying to start server anyway

Отже, спробуйте запустити таку команду, а потім виконати першу команду, наведену вище.

pg_ctl -D /usr/local/var/postgres stop

2

Якщо ви хочете перезапустити Postgresql на Linux, вам доведеться використати таку команду.

/etc/init.d/postgresql restart


1

Це мені вдалося: біжи

sudo lsof -i :<port_number>

після цього він відобразить ПІД, який наразі приєднаний до процесу.

Після цього бігай sudo kill -9 <PID>

якщо це не спрацює, спробуйте рішення, запропоноване користувачем8376606, воно точно спрацює!


1

Спочатку я спробував

lsof -wni tcp: 5432, але номер PID не відображається.

По-друге, я спробував

Postgres -D / usr / local / var / postgres, і це показало, що сервер слухає.

Тому я просто перезапустив свій mac, щоб відновити всі порти назад, і він працював для мене.


1

Для користувачів Docker : у моєму випадку це було спричинено надмірним розміром зображення докера. Ви можете видалити невикористані дані за допомогою pruneкоманди:

docker system prune --all --force --volumes

Попередження: згідно з інструкцією ( docker system prune --help):

Це видалить:

  • всі зупинені контейнери
  • усі мережі, які не використовуються принаймні одним контейнером
  • всі звисаючі зображення
  • весь звисаючий кеш збірки

1

У моєму випадку

  1. Я змінив порт у файлі postgresql.conf
  2. і перезапустіть служби postgresql у

Запустити => service.msc => Перезапустити

  1. тепер повторіть спробу

0

Я часто стикаюся з цією проблемою у вікнах. Я вирішив проблему як Сервіс - Клацніть на PostgreSQL Database Server 8.3 - Клацніть на другій вкладці «Увійти» - виберіть перший рядок «Локальний системний обліковий запис».


0

Це також призводить до тієї ж помилки, якщо ви просто зупините програму PostgreSQL. Потрібно лише розпочати знову. (PostgreSQL 11)


0

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

Це рішення спрацювало для мене,

Для користувачів Ubuntu: За допомогою командного рядка введіть такі команди:

1.service --status-all (що надає перелік усіх служб та їх статус. Де "+" відноситься до запущеної, а "-" означає, що служба більше не працює)

перевірте статус postgresql, якщо його "-", то введіть таку команду

2.systemctl start postgresql (знову запускає сервер)

оновіть сторінку postgresql у браузері, і це працює

Для користувачів Windows:

Шукайте послуги, де ми можемо переглянути список послуг і клацнути правою кнопкою миші на postgresql, клацнути на пуску, і сервер чудово працює.


0

Крок 1:

cd /etc/postgresql/12/main/

відкритий файл з іменем postgresql.conf

sudo nano postgresql.conf

додати цей рядок до цього файлу

listen_addresses = '*'

потім відкрийте файл з іменем pg_hba.conf

sudo nano pg_hba.conf

і додайте цей рядок до цього файлу

host  all  all 0.0.0.0/0 md5

Це дозволяє отримати доступ до всіх баз даних для всіх користувачів із зашифрованим паролем

перезавантажте сервер

sudo /etc/init.d/postgresql restart

0

Я зіткнувся з подібною проблемою, коли намагався підключити свою програму Django до бази даних PostgreSQL .

Я написав свої Dockerfileінструкції з налаштування проекту Django, а потім інструкції з встановлення PostgreSQL та запуску сервера Django в моєму docker-compose.yml.

Я визначив дві послуги у своєму docker-compose-yml.

services:
  postgres:
    image: "postgres:latest"
    environment:
      - POSTGRES_DB=abc
      - POSTGRES_USER=abc
      - POSTGRES_PASSWORD=abc
    volumes:
      - pg_data:/var/lib/postgresql/data/
  django:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8004
    volumes:
      - .:/app
    ports:
      - 8004:8004
    depends_on:
      - postgres 

На жаль, коли б я раніше не запускав, docker-compose upто та сама помилка. раніше спливаюче.

І ось як була визначена моя база даних у Django settings.py .

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'abc',
        'USER': 'abc',
        'PASSWORD': 'abc',
        'HOST': '127.0.0.1',
        'PORT': '5432',
        'OPTIONS': {
            'client_encoding': 'UTF8',
        },
    }
} 

Отже, врешті-решт я скористався docker-compose мережею, що означає, якщо я зміню hostсвою базу даних, postgresяка визначається як послуга вdocker-compose.yml , зробить чудеса.

Отже, Заміна 'HOST': '127.0.0.1' => 'HOST': 'postgres' зробила для мене чудеса.

Після заміни так settings.pyвиглядатиме ваша конфігурація бази даних у .

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'abc',
            'USER': 'abc',
            'PASSWORD': 'abc',
            'HOST': 'postgres',
            'PORT': '5432',
            'OPTIONS': {
                'client_encoding': 'UTF8',
            },
        }
    } 

0

У моєму випадку я забув змінити базу даних з postgres (на моєму виробництві) назад на sqlite3, який я використовував для розробки.

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