Question

How do I connect to postgres from a client machine?

This is an extremely straightforward question. “How do I connect to Postgres DB installed on a digitalocean droplet, from an external client via command-line or via third party apps like PSequel (available for MacOS) or PGAdmin?”. I am surprised that there is no direct tutorial to explain this in plain simple words. Here is what I did so far:

  1. Created a brand new spick and span droplet running Ubuntu 16.04.
  2. Installed postgres following this tutorial - https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04
  3. Now I have Ubuntu user “sammy”, postgres user “sammy” and postgres database “sammy”. I am happily able to connect to DB from within the box.
  4. All that is required now is to connect to this database, from external machine, which for some reason is a herculean task.
  5. I followed https://www.digitalocean.com/community/questions/remote-connect-to-postgresql-with-pgadmin and https://www.digitalocean.com/community/questions/how-to-connect-remotely-to-the-postgres-db-on-the-server-from-the-local-client-machine and https://askubuntu.com/questions/423165/remotely-access-postgresql-database. I changed my /etc/postgresql/9.5/main/pg_hba.conf to host all all 0.0.0.0/0 md5 and in /etc/postgresql/9.5/main/postgresql.conf added listen_addresses='*'
  6. Restarted postgres on remote server via sudo service postgresql restart
  7. [On my local Mac laptop] psql -h <IPv4 address> -p 5432 -U sammy -d sammy. However I get the error psql: FATAL: password authentication failed for user "sammy"

How do I connect to postgres server? I would highly recommend digitalocean’s moderators to write a detailed but simple blog on “Connecting to Postgres from external client, along with best practises.”


Submit an answer

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.

You missed another step of allowing 5432 port into firewall. Type the following command before connecting to remote postgres connection:

sudo ufw allow 5432/tcp

This answer may help to those who are facing trouble to connect remote postgres connection.

Oh, I found a solution to the above accidentally - it is related to the escaping characters:

this worked (at least in my case):

ssh sammy@ipaddress “psql -c "alter user ‘sammydbuser’ with encrypted password ‘some_string’;"” ssh sammy@ipaddress “psql -c "grant all privileges on database ‘sammydb’ to ‘sammydbuser’;"”

note: the quote goes before psql command, then after the switch -c, you have to quote the actual command, but with an escape character. same applies to closing the quotes …

I sincerely hope this might help someone else …

One more interested party here.

So far I had success with:

  1. ssh sammy@ipaddress createdb sammydb
  2. ssh sammy@ipaddress createuser sammydbuser

But not with:

  1. ssh sammy@ipaddress psql -c “alter user ‘sammydbuser’ with encrypted password ‘some_string’;”
  2. ssh sammy@ipaddress psql -c “grant all privileges on database ‘sammydb’ to ‘sammydbuser’;”

Sharing any thoughts would be greatly appreciated …