Reputation: 2981
I want to remotely connect to a Postgres instance. I know we can do this using the psql command passing the hostname
I tried the following:
psql -U postgres -p 5432 -h hostname
I modified the /etc/postgresql/9.3/main/pg_hba.conf file on the target machine to allow remote connections by default
I added the following line to the file
host all all source_ip/32 trust
I restarted the cluster using
pg_ctlcluster 9.2 mycluster stop
pg_ctlcluster 9.2 mycluster start
However, when I try to connect from the source_ip, I still get the error
Is the server running on host "" and accepting TCP/IP connections on port 5432?
What am I doing wrong here?
Upvotes: 149
Views: 417633
Reputation: 347
To remotely access the db in Postgresql, follow the below steps:
i) Edit the file postgresql.conf
sudo nano /etc/postgresql/{version}/main/postgresql.conf
ii) Add the following line that will allow anyone to access your database.
listen_addresses = '*'
Note: It's best practice to keep your database private but in multiple cases, you might need to make it accessible to other machines. Although you can also white list specific IP addresses instead of opening it to all (shown below)
iii) And then edit another file "pg_hba.conf" at the same location.
sudo nano /etc/postgresql/{version}/main/pg_hba.conf
And then add the following line:
// For IPv4
host all all 0.0.0.0/0 md5
// Whitelist a single or multiple IP addresses if you don't want all over the world people to acecss your DB
host all all 65.2.129.40/32 md5
// For IPv6
host all all ::0/0 md5
iv) Save it and restart the Postgresql DB
sudo systemctl restart postgresql
And then try connecting again to the database and you see that you are able to get into the database now from your local device and also from other devices.
And you are good with the connection!
Upvotes: 0
Reputation: 37253
If you want to use a postgres
url you can just do something like this:
psql postgres://user:password@ip_add_or_domain:port/db_name
Upvotes: 18
Reputation: 1741
I resolved this issue using below options:
psql -h <REMOTE HOST> -p <REMOTE PORT> -U <DB_USER> <DB_NAME>
Upvotes: 174
Reputation: 4665
Note that "ident" in pg_hba.conf requires a "ident server" to be running on the client.
Upvotes: 0
Reputation: 124
Step Wise below
listen_addresses = '*'
in postgresql.conf
file, path in general is /etc/postgresql/psql_version/main/postgresql.conf
psql -U <db_username> -h <IP_address>
- in case psql is running on a port other than 5432 on the remote server, specify port by adding -p <port_number>
A little plus below -
In case the IP has been mapped to a domain name, you can connect by replacing <IP_address>
with <host_name>
. To do this, add a new connection rule in pg_hba.conf
file
Note - All above explained can cause security issues - best practice always is to either keep your psql port closed, or only allow a list of IPs to connect through the port.
Upvotes: 3
Reputation: 1963
psql -h <IP_Address> -p <port_no> -d <database_name> -U <DB_username> -W
-W
option will prompt for password. For example:
psql -h 192.168.1.50 -p 5432 -d testdb -U testuser -W
Upvotes: 69
Reputation: 2981
I figured it out.
Had to set listen_addresses='*'
in postgresql.conf
to allow for incoming connections from any ip / all ip
Upvotes: 30