PostgreSQL 12 on Oracle Linux 7.5
There are various methods available to install PostgreSQL database on your Linux server, however yum is one of the always preferred methods when it comes to RedHat Family Distributions.
As this demonstration is done on Oracle Linux 7.5 you can proceed as it is for the installation on Oracle Linux 7.x RedHat Enterprise Linux 7.x & CentOS 7.x. If you’re planning to install it in any
other distribution or version, you may want to visit PostgreSQL download page, select distro and versions and use correct package to install PostgreSQL as per your OS.
1. Install the RPM of repository so that yum can find and install correct version for your OS, in our case EL-7-86_64. Use below command to install repository RPM.
[root@prod ~]# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2. Install the psql client package from the above added repository. Use below command to install PosgreSQL Client.
[root@prod ~]# yum install postgresql12
3. Install PostgreSQL Server package using below command.
[root@prod ~]# yum install postgresql12-server postgresql12-devel postgresql12-libs postgresql12-contrib
After the successful installation decide the DATA AREA for DATABASE CLUSTER(Where the database files will be stored).
I have attached virtual hard drive of 20 GB.
4. Created partition using fdisk utility.
[root@prod ~]# fdisk /dev/sdc n - to create new partition. THEN p - to select type as primary. THEN w - to write changes to partition table. THEN
5. Formatting newly created partition using mkfs utility.
[root@prod ~]# mkfs -t ext3 /dev/sdc1
6. Created directory postgresql under /mnt.
[root@prod mnt]# mkdir postgresql
7. Mount the storage to the Directory.
[root@prod data]# mount -t ext3 /dev/sdc1 /mnt/postgresql
8. Verify the storage using below command.
[root@prod data]# df -hTP Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.5G 0 1.5G 0% /dev tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm tmpfs tmpfs 1.5G 9.6M 1.5G 1% /run tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup /dev/mapper/ol-root xfs 50G 6.4G 44G 13% / /dev/mapper/ol-home xfs 26G 6.9G 20G 27% /home /dev/sda1 xfs 1014M 295M 720M 30% /boot tmpfs tmpfs 301M 12K 301M 1% /run/user/42 tmpfs tmpfs 301M 0 301M 0% /run/user/0 /dev/sdb1 ext3 20G 16G 3.5G 82% /u01 /dev/sdc1 ext3 20G 45M 19G 1% /mnt/postgresql
9. Create OS user named postgres for database server.
[root@prod ~]# useradd postgres
Set Password
[root@prod ~]# passwd postgres Changing password for user postgres. New password: BAD PASSWORD: The password contains the user name in some form Retype new password: passwd: all authentication tokens updated successfully.
10. Give ownership of DATA AREA to user postgres.
[root@prod ~]# chown postgres:postgres -R /mnt/postgresql
Verify it.
[root@prod mnt]# ls -lrth | grep postgresql drwxr-xr-x. 3 postgres postgres 4.0K Oct 4 22:45 postgresql
11. Switch to postgres user and create complete structured directory to store data.
[root@prod ~]# su - postgres Last login: Fri Oct 4 23:29:56 IST 2019 on pts/0 [postgres@prod ~]$ mkdir -p /mnt/postgresql/12/data
12. Set environment variable in .bash_profile of postgres user.
[postgres@prod ~]$ vi .bash_profile
Add below entries.
#PostgreSQL Server Environment Variable Settings. LD_LIBRARY_PATH=/usr/pgsql-12/bin export LD_LIBRARY_PATH PATH=/usr/pgsql-12/bin:$PATH export PATH PGDATA=/mnt/postgresql/12/data export PGDATA echo "PG Profile Loaded" echo "DATA AREA is /mnt/postgresql/12/data" echo "PostgreSQL Version is 12"
[ESC :wq Enter to save and exit]
13. Initialize Database Cluster.
[postgres@prod ~]$ initdb The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /mnt/postgresql/12/data ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Asia/Kolkata creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok initdb: warning: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /mnt/postgresql/12/data -l logfile start
14. Now start the database server using pg_ctl command.
[postgres@prod ~]$ pg_ctl -D /mnt/postgresql/12/data -l logfile start waiting for server to start.... done server started
15. Now try to connect to database server using psql command.
[postgres@prod ~]$ psql psql (12.0) Type "help" for help. postgres=#
There you go, it’s connected now.
Let’s list pre-created databases.
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)
16. Create database.
postgres=# create database demprod; CREATE DATABASE
17. Change current database.
postgres=# \c demprod You are now connected to database "demprod" as user "postgres". demprod=#
18. You can also set environment variable PGDATABASE to “demprod” to connect to demprod database by default while invoking psql.
PGDATABASE=demprod export PGDATABASE
Include this environment setting in .bash_profile load profile using . .bash_profile and invoke psql.
[postgres@prod ~]$ psql psql (12.0) Type "help" for help. demprod=#
There you go.
Do follow me on social media and also catch me on 9 different podcast platforms here.
Listen to Podcast of this post, available on :
Peace 🙂