Once you have your PostgreSQL database server installed, up and running, due to security reasons by default remote access to connect with your database instance is disabled.
If you try connecting with your PostgreSQL database server from client machine, you will encounter error.
could not connect to server: Connection refused (0x0000274D/10061)
Following screenshot displays error I received when trying to connect from a windows client machine using pgAdmin III
Following below steps you will be able to enabled remote access to PostgreSQL database server.
Before even we start it is important to know that there are two configuration files (and others) which control how your database server works. This configuration files contains settings that needs to be tweaked or changed to make your database instance run as per your needs.
- postgresql.conf (Used to set various parameters that affect the database)
- pg_hba.conf (Used to control client authentication, HBA means "Host based authentication")
Above mentioned files can be found at
/etc/postgresql/9.3/main/ folder (here 9.3 is the version of PostgreSQL I have installed on my Ubuntu machine).
You can also query the location of these files from the
First login to your
sudo -u postgres psql
To query location of
To query location of
You can get values of all parameters set for your database instance using following command
To enable remote access first we need to change the
listen_addresses setting which is set to
localhost by default
postgresql.conf file in edit mode
sudo nano postgresql.conf
Find the line which starts with
#listen_addresses = 'localhost' and change it to
listen_addresses = '*'.
This enables the PostgreSQL database server to listen for incoming connection request and query request from any / all available IP address on the host machine. Save the changes by
Above steps only enables networking related settings for remote access, next steps enables client authentication by making changes to the
Before we start making changes to
pg_hba.conf file, I recommend you understand and learn how CIDR - Classless Inter-Domain Routing. You can use UltraTool's CIDR program to compose IP Address CIDR notation that you need to use to enable remote acccess to PostgreSQL database server for user you wish to connect with. You can also add client authentication that can be restricted to a single IP Address / host name.
For the sake of this example I will use CIDR notation
192.168.1.0 / 24 where I wish to connect to my PostgreSQL database which is hosted on
192.168.1.106 from client machine with IP Address
pg_hba.conf file in edit mode
sudo nano pg_hba.conf
Client authentication allow / restrict entry follows below format (there are more formats you can use too):
[TYPE] [DATABASE] [USER] [ADDRESS] [METHOD]
Find line that resembles
host all all 127.0.0.1/32 md5
and add following line after this entry
host all all 192.168.1.0/24 md5
Above added line denotes that client authentication is allowed from host which has IP address between range
192.168.1.254 to any / all database on the PostgreSQL database server and can be any database exists user using MD5 authentication mode.
Note: you need to restart PostgreSQL database server to allow this changes get effective.
sudo service postgresql stop sudo service postgresql start
After restart your database will allow connection from remote client machines. Make sure your host machine's firewall rules are not blocking any request.