I wrote a Python script which connects to the local PostgreSQL database using psycopg2 2.6 and Python 2.7.8. The connection settings and commands are the following:
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)
The script works without problems on machine one which has PostgreSQL 9.4 installed. The configuration in sudo vi /etc/postgresql/9.4/main/pg_hba.conf
is not modified and looks like this, without comments:
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
I can also successfully connect to the same database using pgAdmin III.
The problem
On a second machine with the same setup I cannot connect via the script. The following error occurs:
psycopg2.OperationalError: FATAL: password authentication failed for user "myappuser"
FATAL: password authentication failed for user "myappuser"
The only difference between these two machines is the database password. So I changed it to a simple password - and boom, it works. So I changed it back to a complicated ... and it does not work again. The password is something like this:
DATABASE_PASSWORD = 'zyx@12AA\w2'
So I thought: "This is stupid. It must be my mistake." So I set the database password on machine one to the same as on the second machine. And whoop the Python script also fails.