При отладке проблемы с подключением всегда стоит помнить, через какие уровни мы должны go пройти, прежде чем достигнуть сервиса. При подключении службы PostgreSQL будет как минимум три уровня:
- Сеть: межсетевой экран, NAT, переадресация портов
- PostgreSQL ACL
- PostgreSQL login
Важно понимать, какой слой вызывает проблему, ошибка клиента PostgreSQL (в вашем сценарии заключена в psycopg2) поможет вам решить эту проблему, выдав ad-ho c сообщение об ошибке:
- Обычно возникает проблема с сетью:
Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
, что означает, что вам вообще не удалось подключить службу PostgreSQL, проблема зависит от службы; - Проблема ACL, как правило, вызывает типичную ошибку:
No pg_hba.conf entry for host <hostname>, user <username>, database <database>
, что означает, что вы подключили службу PostgreSQL, но соединение не считается действительным в ACL; - Проблема при входе в систему обычно вызывает возникшую ошибку. :
password authentication failed for user "<user>"
, что означает, что вы подключили службу PostgreSQL, и соединение соответствует записи ACL, но аутентификация не удалась.
В более позднем сценарии важно знать, какие запись сработала, потому что она определяет режим аутентификации. В вашем случае это была запись md5
(поскольку в режиме peer
пароль отсутствует, и ваш туннель S SH должен отображать локальный хост, чтобы вы видели как host
вместо local
для postgreSQL ракурс):
host all all 127.0.0.1/32 md5
Очевидно, ваш пароль не тот, который вы ожидаете. Чтобы решить эту проблему, убедитесь, что:
- вы установили пароль для пользователя postgreSQL и проверили привилегии LOGIN (не для пользователя unix / S SH, существуют разные концепции);
- вы используете тот же пароль в вашем
psycopg2
соединении, тогда вы должны быть в состоянии соединиться;
Читая ваш комментарий, кажется, вы можете иметь '
цитату в вашем пароле как хорошо. Таким образом, ваш пароль в вашем соединении может быть:
psycopg2.connect("dbname='database_name' user='database_user' host='localhost' password="'database_password'" port=3333")
Или, если требуется кавычка, это может означать, что вы используете некоторые специальные символы, которые необходимо экранировать. Вы также можете попробовать более простой пароль для отладки, а затем использовать более надежный.