Categories: DebianLinux

How to Install PostgreSQL on Debian

PostgreSQL, also known as Postgres, is an open-source general-purpose object-relational database management system. It has many powerful features such as online backups, point in time recovery, nested transactions, SQL and JSON querying, multi-version concurrency control (MVCC), asynchronous replication, and more. PostgreSQL has been used in various popular projects. It is among the list of most popular and widely used databases.

This tutorial walks you through the steps of installing the PostgreSQL database server on Debian 10. We’ll also explore the fundamentals of basic database administration.

PostgreSQL Installation

At the time of writing this article, the latest version of PostgreSQL available from the default Debian repositories is PostgreSQL version 11.5.

To install PostgreSQL on your Debian server perform the following steps as root or user with sudo privileges:

Start by updating the APT package index:

Install the PostgreSQL server and contrib package which provides additional features for the PostgreSQL database:

sudo apt install postgresql postgresql-contrib

Once the installation is complete, the PostgreSQL service will start. To verify the installation, use the psql tool to print the server version:

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

Once the installation is complete, the PostgreSQL service will start. To verify the installation, use the psql tool to print the server version:

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

The output should look something like the following:

PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit

psql is an interactive terminal program that allows you to interact with the PostgreSQL server.

PostgreSQL Roles and Authentication Methods

PostgreSQL handles database access permissions using the concept of roles. Depending on how you set up the role, it can represent a database user or a group of database users.

PostgreSQL supports several authentication methods. The most frequently used methods are:

  • Trust – A role can connect without a password, as long as the criteria defined in the pg_hba.conf are met.
  • Password – A role can connect by providing a password. The passwords can be stored as scram-sha-256 md5 and password (clear-text)
  • Ident – Only supported for TCP/IP connections. It works by obtaining the client’s operating system user name, with an optional user name mapping.
  • Peer – Same as Ident, but it is only supported on local connections.

PostgreSQL client authentication is defined in the configuration file named pg_hba.conf. For local connections, PostgreSQL is set to use the peer authentication method.

The “postgres” user is automatically created when PostgreSQL is installed. This user is the superuser for the PostgreSQL instance, and it is equivalent to the MySQL root user.

To log in to the PostgreSQL server as “postgres”, switch to the user postgres and access a PostgreSQL prompt using the psql utility:

sudo su - postgres
psql

From here you can interact with the PostgreSQL server. To exit out of the PostgreSQL shell type:

\q

You can use the sudo command to access the PostgreSQL prompt without switching users:

sudo -u postgres psql

The postgres user is typically used only from the localhost.

Creating PostgreSQL Role and Database

The createuser command allows you to create new roles from the command line. Only superusers and roles with CREATEROLE privilege can create new roles.

In the following example, we’ll create a new role named kylo, a database named kylodb and grant privileges on the database to the role.

First, create the role by issuing the following command:

sudo su - postgres -c "createuser kylo"

Next, create the database using the createdb command:

sudo su - postgres -c "createdb kylodb"

To grant permissions to the user on the database, connect to the PostgreSQL shell:

sudo -u postgres psql

Run the following query:

grant all privileges on database kylodb to kylo;

Enable Remote Access to the PostgreSQL Server

By default, the PostgreSQL, server listens only on the local interface 127.0.0.1.

If you want to connect to the PostgreSQL server from remote locations, you need to set the server to listen on the public interface and edit the configuration to accept remote connections.

Open the configuration file postgresql.conf and addlisten_addresses = '*' the sectionCONNECTIONS AND AUTHENTICATION. This instruct the server to listen on all network interfaces.

sudo nano /etc/postgresql/11/main/postgresql.conf

Edit the file as shown below.

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'     # what IP address(es) to listen on;

Save the file and restart the PostgreSQL service for changes to take effect:

sudo service postgresql restart

Verify the changes with the ss utility:

ss -nlt | grep 5432
LISTEN   0         128                 0.0.0.0:5432             0.0.0.0:*
LISTEN   0         128                    [::]:5432                [::]:*

The output should show that the PostgreSQL server listens on all interfaces (0.0.0.0).

The last step is to configure the server to accept remote logins by editing the pg_hba.conf file.

Below are some examples showing different use cases:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane will be able to access all databases from all locations using an md5 password
host    all             jane            0.0.0.0/0                md5

# The user jane will be able to access only the janedb from all locations using an md5 password
host    janedb          jane            0.0.0.0/0                md5

# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host    all             jane            192.168.1.134            trust

Conclusion

We’ve shown you how to install and configure PostgreSQL on Debian 10. For more information on this topic, consult the PostgreSQL Documentation.

Arslan ud Din Shafiq

Alibaba Cloud MVP, Alibaba Cloud Technical Author, Dzone MVB, Software Engineer, Software Developer, Software Designer, Web Engineer, Web Developer, Web Designer, Database Designer, Database Developer, Cloud Computing Specialist, Linux Expert, Servers, 3D Modeling, Blogger, Facebook Map Editor, Google Map Editor

Recent Posts

How To Set Up Secure Nginx Server Blocks on Ubuntu 22.04

NGINX Server Nginx, a popular open-source web server, excels at handling high traffic websites efficiently.… Read More

4 days ago

The Web Server Showdown: Nginx vs. Apache, LiteSpeed, Caddy, and Beyond

In the realm of web hosting, choosing the right web server is paramount. It acts… Read More

4 days ago

Linear guidance systems

Are indispensable for ensuring smooth, precise linear motion in many industrial applications. Whether in robotics,… Read More

2 months ago

Cyber Attack Statistics – Identifying Vulnerabilities and Strengthening Defenses

Cyber attacks are becoming more frequent, complex, and damaging. They can disrupt critical operations and… Read More

3 months ago

Empowering Cybersecurity in 2024 with XDR for Comprehensive Threat Detection and Response

With the rise of new threats and the increasing complexity of IT environments, organizations need… Read More

3 months ago

Facade Design Pattern: Simplifying Complex Systems

1. Introduction In software design, managing complex systems can be challenging. The Facade Design Pattern… Read More

5 months ago