Я написал Python script, который подключается к локальной базе PostgreSQL, используя psycopg2 2.6 и Python 2.7.8. Параметры подключения и команды следующие:
HOST = '127.0.0.1'
DATABASE_NAME = 'myappdatabase'
DATABASE_PORT = '5432'
DATABASE_USER = 'myappuser'
DATABASE_PASSWORD = 'secret'
DATABASE_TABLE = 'myappdata'
def _database_connection():
conn_string = "host='{0}' dbname='{1}' port='{2}' user='{3}' \
password='{4}'".format(HOST, DATABASE_NAME, DATABASE_PORT, \
DATABASE_USER, DATABASE_PASSWORD)
return psycopg2.connect(conn_string)
script работает без проблем на машине, на которой установлен PostgreSQL 9.4. Конфигурация в sudo vi /etc/postgresql/9.4/main/pg_hba.conf
не изменяется и выглядит следующим образом: без комментариев:
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Я также могу успешно подключиться к одной базе данных с помощью pgAdmin III.
Проблема
На второй машине с той же настройкой я не могу подключиться через script. Произошла следующая ошибка:
psycopg2.OperationalError: FATAL: аутентификация пароля для пользователя "myappuser"
FATAL: аутентификация паролей для пользователя "myappuser"
Единственной разницей между этими двумя машинами является пароль базы данных. Поэтому я изменил его на простой пароль - и бум, он работает. Поэтому я изменил его на сложный... и он снова работает не. Пароль выглядит примерно так:
DATABASE_PASSWORD = 'zyx @12AA\w2'
Поэтому я подумал: "Это глупо. Должно быть, это моя ошибка". Поэтому я устанавливаю пароль базы данных на машине один на тот же, что и на второй машине. И кричать на Python script также не удается.