Работает ли сервер локально и принимает соединения в доменном сокете Unix «/var/run/postgresql/.s.PGSQL.5432»?

#postgresql #flask

#postgresql #flask

Вопрос:

Ошибка в теме возникает при выполнении приведенной ниже команды.

 heroku run python manage.py db upgrade
  
 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) 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"?
  

Приложение отлично работает на локальном сервере, но не переносится на heroku с postgres db.

Перепробовал множество решений, пока ничего не сработало.

При запуске БД появляется следующее сообщение

 aiting for server to start....2020-10-11 20:14:58.637  04 [11244] LOG:  starting PostgreSQL 13.0 on x86_64-apple-darwin19.4.0, compiled by Apple clang version 11.0.0 (clang-1100.0.33.8), 64-bit
2020-10-11 20:14:58.641  04 [11244] LOG:  listening on IPv6 address "::1", port 5432
2020-10-11 20:14:58.641  04 [11244] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2020-10-11 20:14:58.644  04 [11244] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-10-11 20:14:58.672  04 [11246] LOG:  database system was interrupted; last known up at 2020-10-11 20:11:13  04
2020-10-11 20:14:59.020  04 [11246] LOG:  database system was not properly shut down; automatic recovery in progress
2020-10-11 20:14:59.034  04 [11246] LOG:  redo starts at 0/1671320
2020-10-11 20:14:59.034  04 [11246] LOG:  invalid record length at 0/1671358: wanted 24, got 0
2020-10-11 20:14:59.034  04 [11246] LOG:  redo done at 0/1671320
2020-10-11 20:14:59.067  04 [11244] LOG:  database system is ready to accept connections
 done
server started
  

Ответ №1:

вам просто нужно перезапустить psql сервера. Будьте осторожны с этой базой данных:

 sudo service postgresql restart
  

Внезапно у меня возникла та же ошибка. Он разрешается. Это не связано с psycopg2.connect (dsn)

Ответ №2:

Проблема в том, что из-за ошибки «/ var /run /postgresql /.s.PGSQL.5432″?», а не из журнала «прослушивание сокета Unix «/tmp / .s.PGSQL.5432». Сначала я бы попробовал изменить ваш DSN режим использования host= , чтобы вы не пытались подключиться к сокету. Затем вам нужно разобраться, почему psycopg2 он ищет другой сокет. Обычно это происходит, когда он компилируется / используется против libpq одного дистрибутива, в который помещается сокет, /var/run/ а затем запускается на другом, где находится сокет /tmp/ .

Комментарии:

1. Если ваш dsn for conn не указывает на это, он не будет работать. Вам необходимо предоставить полную информацию и сделать это в своем вопросе, чтобы другим не пришлось просматривать все комментарии, чтобы найти ее. Попробуйте то, что я предложил в своем ответе, то есть укажите host на то, что не является сокетом. Другими словами, по фактическому имени или адресу хоста.

2. Спасибо за попытку помочь Адриану, но не могу понять, что требуется сделать.

3. Для начала в вашем вопросе укажите информацию о том, что dsn такое in conn = _connect(dsn, connection_factory=connection_factory, **kwasync) ?

4. на моем mac явно не установлен какой-либо dsn

5. Ну, это ваша проблема. Вам нужно указать что-то для dsn in psycopg2.connect(dsn) , где бы это ни вызывалось в коде. В противном случае он будет использовать значения по умолчанию. Также я предполагаю, что вы установили psycopg2-binary .