Changing (forgotten) PostgreSQL password

PostgreSQL; Source: clipartist.net

Whether you lost password for postgres user or you’d just like to change it, the process is very simple. Unlike resetting lost password for MySQL’s root user, resetting postgres’ password is pretty straightforward and you’ll not experience any kind of downtime. This article explains how to change/reset password for postgres user in PostgreSQL 8.4 server that runs on CentOS 5.7, but I’ve thrown in some tips to help you out if you’re using Debian or Ubuntu Linux distro.

Changing known password

Changing postgres’ password, assuming you know current password (i.e. you can connect to PostgreSQL server), is pretty simple. You either become postgres user using su and then run psql utility

# su postgres
$ psql

or you can connect to PostgreSQL server directly as current user with the following command and supply postgres’ password when asked

$ psql -U postgres

After connecting to PostgreSQL server, you should get something like

psql (8.4.7)
Type "help" for help.
postgres=#

To set new password, you can use \password meta-command

postgres=# \password
Enter new password:
Enter it again:
postgres=#

This meta command sends an SQL statement to PostgreSQL server containing an already encrypted password. You can run the equivalent SQL query, which is a bit harder to remember

ALTER USER postgres WITH ENCRYPTED PASSWORD 'MyNewPassword';

Changing forgotten password

If you’ve forgotten your PostgreSQL password, you can relax. Resetting forgotten password is very easy and it’s nowhere near as complex as with MySQL, which requires stopping and starting the server with –skip-grant-tables switch and losing valuable uptime.

So, to reset postgres’ password you should open pg_hba.conf config file which is located in /var/lib/pgsql/data/ if you use CentOS or RHEL. If you use Debian or Ubuntu, you should find this file in /etc/postgresql/[version]/main/.

In pg_hba.conf you should have the following line

local     all        postgres               md5

This line defines that user postgres can connect to any database using md5 authentication method. In order to reset user’s password, you should set ident method instead of md5. So, the modified line should look like

local     all        postgres               ident

If you don’t see the mentioned line in your pg_hba.conf config file, then your PostgreSQL server is probably configured for all users to authenticate in the same way with

local     all        all                    md5

If this is the case, you can simply add custom rule just for user postgres as explained above.

After changing authentication method for user postgres and saving changes in pg_hba.conf, you’ll need to reload PostgreSQL server. On CentOS and RHEL you can use

# service postgresql reload

On Debian and Ubuntu you can reload PostgreSQL with

# /etc/init.d/postgresql reload

If you try to connect to PostgreSQL server with psql utility, you’ll notice that you’ll be logged in right away. To change your password simply use \password meta-command as explained above. After you reset your password, don’t forget to restore original configuration in pg_hba.conf and again reload PostgreSQL server.