PostgreSQL error: Peer authentication failed for user “postgres”

Updated: January 6, 2024 By: Guest Contributor Post a comment

The Problem

The error ‘Peer authentication failed for user “postgres”‘ usually occurs when trying to access a PostgreSQL database. This error is related to the PostgreSQL authentication method, which is set to ‘peer’ by default for local connections on Unix domain sockets. In this mode, PostgreSQL expects the operating system user to have the same name as the PostgreSQL role you are attempting to login with.

Solution 1: Change Authentication Method

One common solution is to change the authentication method in the Postgres configuration file (pg_hba.conf) from ‘peer’ to ‘md5’ or another method.

Steps:

  1. Locate your pg_hba.conf file, typically found in the PostgreSQL data directory.
  2. Edit the pg_hba.conf file with a text editor.
  3. Find the line that corresponds to the ‘local’ connection type for the ‘postgres’ user or database.
  4. Change the method from ‘peer’ to ‘md5’.
  5. Save the file after making the changes.
  6. Restart PostgreSQL to apply the changes.

Commands:

# Change authentication method

# Before
local   all   postgres   peer

# After
local   all   postgres   md5

Pros: Changing the authentication method will allow you to use password authentication which is generally more flexible. Cons: You still need to manage passwords securely.

Solution 2: Use Suitable OS User

Access PostgreSQL with an operating system user that matches the PostgreSQL role to comply with the ‘peer’ authentication.

Steps:

  1. Create an operating system user that matches the PostgreSQL role name if one does not exist.
  2. Log in to your system as the newly created user or the user with the same name as the PostgreSQL role.
  3. Execute the psql command or your PostgreSQL connection command.

Command:

# Log in as the same OS user
sudo -u postgres psql

Because this method is based on Unix user accounts, no specific example of SQL or PostgreSQL configuration code is needed. Simply make sure the OS username matches the role you’re trying to use.

Pros: This approach uses an existing security infrastructure without needing password management. Cons: It’s less flexible in environments with multiple users.

Final Tips

It’s crucial to understand both your environment and your needs before choosing a solution. For a secure production system, you might wish to look into stronger authentication methods such as SCRAM-SHA-256. Regularly updating and upgrading PostgreSQL would ensure you benefit from the latest security and performance enhancements. Always take a backup before making configuration changes to the database system.