Postgresql is an open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance. It was originally named POSTGRES, referring to its origins as a successor to the Ingres database developed at the University of California, Berkeley. PostgreSQL is used as the primary data store or data warehouse for many web, mobile, geospatial, and analytics applications. PostgreSQL can store structured and unstructured data in a single product.
How to Install and Configure Postgres 15 on RHEL 9 based distributions like Rocky Linux 9
Check these also:
- How to Install and Configure Postgres 14 on Rocky Linux 9
- How to Install and Configure Postgres 14 on Alma Linux 9
- How to Install Postgres 14 on Rocky Linux 8/Centos 8
- How to Install & Configure Postgres 14 on FreeBSD 13
- Postgres Permissions – Create, Update, Delete Database Users
- Running Postgresql 14 with Docker and Docker-Compose
- How to Install and Configure Postgres 14 on Debian 11
- How to Install and Configure Postgres 14 Ubuntu 20.04
- How to Install and Configure Postgres 14 on Fedora 34
- How to Install & Configure Postgres 14 on OpenSUSE Leap 15.3
Prerequisites
To follow along, ensure you have the following:
- Rocky Linux 9 server
- Root access to the server or user with root access
- Internet access from the server
- Basic knowledge of Linux terminal
Table of contents
- Ensure the server is up to date
- Installing and starting Postgres Server
- PostgreSQL Roles and Databases Authentication Methods
- Connecting to postgres database
- Configuring postgres 14 instance for remote access
- User management
1. Ensure the server is up to date
Before proceeding, let us ensure that our server has up to date packages. Use this command to update the packages:
sudo dnf update -y
2. Installing and starting Postgres Server
The default repositories for Rocky Linux 9 has an older version of PostgresQL.
We will use the repo provided by the postgres team to set up repositories for postgres 15 then install the package.
Let us Install the repository RPM using this command:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Disable builtin Postgres module:
sudo dnf -qy module disable postgresql
Finally install PostgreSQL 15 server:
sudo dnf install -y postgresql15-server
Let’s also install the Contrib package which provides several additional features for the PostgreSQL database system:
sudo dnf install -y postgresql15-contrib
Once the installation is complete, initialize the PostgreSQL database with the following command:
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
Enable the service so it starts when the server reboots.
sudo systemctl enable postgresql-15
Finally start the postgres service with this command:
sudo systemctl start postgresql-15
Confirm that Postgres is running:
$ sudo systemctl status postgresql-15
● postgresql-15.service - PostgreSQL 15 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2022-11-06 08:43:53 UTC; 14s ago
Docs: https://www.postgresql.org/docs/15/static/
Process: 197435 ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 197440 (postmaster)
Tasks: 7 (limit: 45121)
Memory: 17.5M
CPU: 56ms
CGroup: /system.slice/postgresql-15.service
├─197440 /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/data/
├─197441 "postgres: logger "
├─197442 "postgres: checkpointer "
├─197443 "postgres: background writer "
├─197445 "postgres: walwriter "
├─197446 "postgres: autovacuum launcher "
└─197447 "postgres: logical replication launcher "
Nov 06 08:43:53 unstable-rockysrv systemd[1]: Starting PostgreSQL 15 database server...
Nov 06 08:43:53 unstable-rockysrv postmaster[197440]: 2022-11-06 08:43:53.788 UTC [197440] LOG: redirecting log output to logging collector process
Nov 06 08:43:53 unstable-rockysrv postmaster[197440]: 2022-11-06 08:43:53.788 UTC [197440] HINT: Future log output will appear in directory "log".
Nov 06 08:43:53 unstable-rockysrv systemd[1]: Started PostgreSQL 15 database server.
The Active: active (running)
shows that the service is up and running.
Next, let us verify that the installation was successful by connecting to the PostgreSQL database server and printing its version:
sudo -u postgres psql -c "SELECT version();"
Output:
$ sudo -u postgres psql -c "SELECT version();"
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 15.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9), 64-bit
(1 row)
3. PostgreSQL Roles and Databases Authentication Methods
PostgreSQL uses a concept called roles
to handle client authentication and authorization. By default, Postgres is set up to use ident authentication
, meaning that it associates Postgres roles with a matching Unix/Linux system account. If a role exists within Postgres, a Unix/Linux username with the same name is able to sign in as that role.
The installation procedure created a user account called postgres
that is associated with the default postgres
role. In order to use PostgreSQL, you can log in to that account.
PostgreSQL supports multiple authentication methods . The most commonly-used methods are:
Trust
– A role can connect without a password, as long as the conditions defined in thepg_hba.conf
are met.Password
– A role can connect by providing a password. The passwords can be stored asscram-sha-256
,md5
, andpassword
(clear-text
).Ident
– Only supported on 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 supported on local connections only.
4. Connecting to postgres database
- By Switching to
postres
user
Switch over to the postgres account on your server by typing this in the terminal;:
sudo -i -u postgres
You can now access a Postgres prompt immediately by typing:
$ psql
psql (15.0)
Type "help" for help.
postgres=#
This will log you into the PostgreSQL prompt, and from here you are free to interact with the database management system right away.
- By running the command as
postgres
user
Use this to run the command directly as the postgres
user using sudo
sudo -u postgres psql
Output:
$ sudo -u postgres psql
psql (15.0)
Type "help" for help.
postgres=#
Ensure that you run the above command as a user that has sudo privileges.
5. Configuring Postgresql instance for remote access
To achieve this, we will modify postgres configuration files. We need to open the files and adjust the configs are required. The main configuration file for Postgresql 15 can be found in this path /var/lib/pgsql/15/data/pg_hba.conf
Let’s change peer identification to trust. Run this command as root:
sed -i '/^local/s/peer/trust/' /var/lib/pgsql/15/data/pg_hba.conf
Change ident identification to md5 to allow password login.
sed -i '/^host/s/ident/md5/' /var/lib/pgsql/15/data/pg_hba.conf
Add a block to allow access from everywhere:
Add this content to the file /var/lib/pgsql/15/data/pg_hba.conf
host all all 0.0.0.0/0 md5
Ensure PostgreSQL is listening on *
Add this line to the config here /var/lib/pgsql/15/data/postgresql.conf
listen_addresses='*'
Restart postgresql server to reload the configurations:
sudo systemctl restart postgresql-15
6. User management
Creating Superuser
Now that everything is set up, let us create a super user.
Connect to the DB as postres role:
$ sudo -u postgres psql
psql (15.0)
Type "help" for help.
postgres=#
Create super user with name root
:
CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere';
Output:
postgres=# CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere';
CREATE ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | Superuser, Create role, Create DB | {}
postgres=#
Managing Application Users
Use this to create a database, create a user and grant that user all accesss to that database:
create database app_db_name;
create user app_user with encrypted password 'dbpassword';
grant all privileges on database app_db_name to app_user;
Checkout this comprehensive guide on user and permission management in postgres here.
Connecting to the instance from remote host
Use this command to connect to the postgres instance from local machine:
psql 'postgres://<username>:<password>@<host>:<port>/<db>?sslmode=disable'
# like
psql 'postgres://root:passwordhere@192.160.1.20:5432/postgres?sslmode=disable'
Conclusion
Up to this point we have managed to install Postgresql 15 on an RHEL 9 based servers, do some basic configurations then do basic user management.