This guide will discuss the installation of PostgreSQL 12 on Fedora 31/30/29. PostgreSQL is an open source database server created to be reliable, robust, and for performance focused deployments. The PostgreSQL 12 was released for general use on 3rd October 2019 with many new features.

Check available guides if you’re using a different flavor of Linux:

Install PostgreSQL 12 on Ubuntu

Install PostgreSQL 12 on Debian

Install PostgreSQL 12 on CentOS 7 / CentOS 8

Let’s get started with the install of PostgreSQL 12 on Fedora 31/30/29.

Step 1: Update System

Ensure system packages are up to date:

sudo dnf install -y vim bash-completion wget
sudo dnf update -y

Since you may have Kernel updates, it is recommended to reboot your system after an upgrade

sudo reboot

Step 2: Add the PostgreSQL Yum Repository

Add PostgreSQL Yum Repository to your Fedora system by running the below command:

Fedora 31:

sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/F-31-x86_64/pgdg-fedora-repo-latest.noarch.rpm

Fedora 30:

sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/F-30-x86_64/pgdg-fedora-repo-latest.noarch.rpm

Fedora 29:

sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/F-29-x86_64/pgdg-fedora-repo-latest.noarch.rpm

When prompted to confirm installation, press the key.

Last metadata expiration check: 0:01:25 ago on Sat 12 Oct 2019 06:52:54 AM UTC.
pgdg-fedora-repo-latest.noarch.rpm                                                                                  21 kB/s | 9.7 kB     00:00    
Dependencies resolved.
===================================================================================================================================================
 Package                                  Architecture                   Version                        Repository                            Size
===================================================================================================================================================
Installing:
 pgdg-fedora-repo                         noarch                         42.0-5                         @commandline                         9.7 k

Transaction Summary
===================================================================================================================================================
Install  1 Package

Total size: 9.7 k
Installed size: 9.7 k
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                           1/1 
  Installing       : pgdg-fedora-repo-42.0-5.noarch                                                                                            1/1 
  Verifying        : pgdg-fedora-repo-42.0-5.noarch                                                                                            1/1 

Installed:
  pgdg-fedora-repo-42.0-5.noarch                                                                                                                   

Complete!

Step 3: Install PostgreSQL 12 on Fedora 31/30/29

After the PostgreSQL Repository is added to Fedora system, install PostgreSQL 12 Server / Client packages:

sudo dnf install postgresql12-server postgresql12

Agree to the installation.

Last metadata expiration check: 0:01:17 ago on Sat 12 Oct 2019 07:00:29 AM UTC.
Dependencies resolved.
===================================================================================================================================================
 Package                                   Architecture                 Version                                 Repository                    Size
===================================================================================================================================================
Installing:
 postgresql12-server                       x86_64                       12.0-1PGDG.f30                          pgdg12                       5.1 M
Installing dependencies:
 postgresql12                              x86_64                       12.0-1PGDG.f30                          pgdg12                       1.5 M
 postgresql12-libs                         x86_64                       12.0-1PGDG.f30                          pgdg12                       393 k

Transaction Summary
===================================================================================================================================================
Install  3 Packages

Total download size: 7.0 M
Installed size: 32 M
Is this ok [y/N]: y

Step 4: Initialize the database and enable automatic start

Now that the database packages have been installed, Initialize the database by running the following command

$ sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK

Then start and enable the service to start on boot

sudo systemctl enable --now postgresql-12

Confirm service status.

$ systemctl status postgresql-12
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 07:08:57 UTC; 12s ago
     Docs: https://www.postgresql.org/docs/12/static/
  Process: 1506 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 1511 (postmaster)
    Tasks: 8 (limit: 2354)
   Memory: 15.9M
   CGroup: /system.slice/postgresql-12.service
           ├─1511 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
           ├─1512 postgres: logger   
           ├─1514 postgres: checkpointer   
           ├─1515 postgres: background writer   
           ├─1516 postgres: walwriter   
           ├─1517 postgres: autovacuum launcher   
           ├─1518 postgres: stats collector   
           └─1519 postgres: logical replication launcher   

Oct 12 07:08:57 fed30.novalocal systemd[1]: Starting PostgreSQL 12 database server...
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.760 UTC [1511] LOG:  starting PostgreSQL 12.0 on x86_64-pc-linux-gnu, compil>
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.762 UTC [1511] LOG:  listening on IPv6 address "::1", port 5432
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.762 UTC [1511] LOG:  listening on IPv4 address "127.0.0.1", port 5432
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.767 UTC [1511] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.>
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.774 UTC [1511] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.782 UTC [1511] LOG:  redirecting log output to logging collector process
Oct 12 07:08:57 fed30.novalocal postmaster[1511]: 2019-10-12 07:08:57.782 UTC [1511] HINT:  Future log output will appear in directory "log".
Oct 12 07:08:57 fed30.novalocal systemd[1]: Started PostgreSQL 12 database server.

If you have a running Firewall service and remote clients should connect to your database server, allow PostgreSQL service.

sudo firewall-cmd --add-service=postgresql --permanent
sudo firewall-cmd --reload

Step 5: Enable remote Access to PostgreSQL (Optional)

If you have Applications connecting to the database server over the network, edit the file /var/lib/pgsql/12/data/postgresql.conf and set Listen address to your server IP address or “*” for all interfaces.

$ sudo vim /var/lib/pgsql/12/data/postgresql.conf 
listen_addresses = '*'

Also set PostgreSQL to accept remote connections from allowed hosts.

$ sudo vim /var/lib/pgsql/11/data/pg_hba.conf

# Accept from anywhere
host all all 0.0.0.0/0 md5

# Accept from trusted subnet
host all all 10.10.10.0/24 md5

Restart PostgreSQL 12 service after making the change.

sudo systemctl restart postgresql-12

Step 6: Set PostgreSQL admin user’s password

Set PostgreSQL admin user password.

$ sudo su - postgres
$ psql -c "alter user postgres with password 'StrongPassword'"

Where StrongPassword is the new password for postgres user.

Step 7: Install pgAdmin 4 Web Management

If you need an easy way for managing PostgreSQL database server (Similar to phpMyAdmin for MySQL), consider installing pgAdmin4.

Install pgAdmin 4 on Fedora

Enjoy running PostgreSQL 12 on Fedora Linux. Related guides are:

Install PostgreSQL 12 on Ubuntu

Install PostgreSQL 12 on Debian

Install PostgreSQL 12 on CentOS 7 / CentOS 8