How To

Install PostgreSQL on Ubuntu 18.04 with Remote Access Setup

PostgreSQL (also called Postgres) is a free, open-source, object-relational database management system with a strong reputation for reliability, SQL standards compliance, and advanced feature support. It handles complex queries, JSON data, full-text search, and custom data types, making it a natural fit for web applications that outgrow simpler databases.

This guide shows you how to install PostgreSQL on Ubuntu 18.04, connect to the database, manage roles and authentication, create users and databases, and configure the server to accept remote connections.

<strong>Prerequisite:</strong>&nbsp;You need sudo access.

Install PostgreSQL on Ubuntu: Package Setup and Connection Basics

Install PostgreSQL and the contrib package, which adds useful extensions and utility functions not included in the core installation:

bashsudo apt updatesudo apt install postgresql postgresql-contrib

PostgreSQL starts automatically after installation. Verify it is running by connecting and printing the server version:

bashsudo -u postgres psql -c "SELECT version();"

psql is the PostgreSQL interactive terminal. It lets you run SQL queries, manage database objects, and administer the server from the command line.

To open a psql session as the postgres superuser:

bashsudo -u postgres psql

Type \q to exit. The postgres system user is created automatically during installation. It is the PostgreSQL superuser — equivalent to the MySQL root user. It uses peer authentication by default, which is why sudo -u postgres psql works without a password.

PostgreSQL Roles, Authentication Methods, and User Management

PostgreSQL uses roles instead of traditional user accounts. A role can represent a single user or a group of users. Permissions are granted at the role level. Authentication rules for each role are defined in /etc/postgresql/10/main/pg_hba.conf.

Supported authentication methods:

  • Trust: Connect without a password if criteria in pg_hba.conf are met
  • Password: Authenticate with a password (scram-sha-256, md5, or clear-text)
  • Peer: Match the Linux system user to the PostgreSQL role (local connections only)
  • Ident: Same as Peer but over TCP/IP connections

Create a role and database. Run these commands as the postgres system user:

bashsudo su - postgres -c "createuser john"sudo su - postgres -c "createdb johndb"

Grant the role full privileges on the database:

bashsudo -u postgres psql
sqlGRANT ALL PRIVILEGES ON DATABASE johndb TO john;

Type \q to exit the psql shell.

Enable Remote Access to PostgreSQL with postgresql.conf

By default, PostgreSQL only listens on 127.0.0.1. To accept connections from remote hosts, edit the configuration file:

bashsudo vim /etc/postgresql/10/main/postgresql.conf

In the CONNECTIONS AND AUTHENTICATION section, change or add:

listen_addresses = '*'

Save the file and restart PostgreSQL:

bashsudo service postgresql restart

Verify PostgreSQL is now listening on all network interfaces:

bashss -nlt | grep 5432

The output should show 0.0.0.0:5432, confirming remote connections are possible.

Configure remote authentication. Edit /etc/postgresql/10/main/pg_hba.conf and add rules using this format:

host  database  user  address  method

For example, to allow user jane to connect from any IP using a password:

host  all  jane  0.0.0.0/0  md5

Changes to pg_hba.conf require a service restart to take effect.

PostgreSQL is now installed and configured on your Ubuntu 18.04 server. Visit the PostgreSQL documentation to learn about indexing, replication, connection pooling, and advanced query tuning. Leave a comment below if you run into any issues.

Cyber Defence

Recent Posts

git fetch vs git pull: How They Work and When to Use Each

Both git fetch and git pull talk to a remote repository, but they do very different things to your…

1 week ago

git cherry-pick Command: Apply Commits from Another Branch

Sometimes the change you need already exists, just on the wrong branch. A hotfix lands…

1 week ago

Best Email APIs for Secure Business Email: Why Developers Are Moving Beyond SMTP

Email is still one of the most important communication channels inside modern applications. Password resets,…

1 week ago

Nginx Commands in Linux: Start, Stop, Reload, Test, and Log

Nginx is a high-performance web server and reverse proxy trusted by some of the largest…

2 weeks ago

ufw Command in Linux: Manage Firewall Rules with Examples

ufw (Uncomplicated Firewall) sits on top of iptables (or nftables on newer systems) and replaces…

2 weeks ago

who Command in Linux: Show All Logged-In Users and Sessions

When you share a server with a team or investigate unexpected activity, the first question…

2 weeks ago