One issue with the packages is the hard coded PGDATA, which will be overwritten in the Servicefile with each update of PostgreSQL. This blog entry based on PostgreSQL 12 with CentOS 7 and CentOS 8.
On a minimal installation in my mind a few things are missing, the net-tools package and nano as editor, I’m a friend of using nano instead of vi.
CentOS 7:
$ yum install net-tools $ yum install nano
CentOS 8:
$ dnf install net-tools $ dnf install nano
For using the PostgreSQL repository it is important to exclude PostgreSQL from the CentOS Repository.
By using CentOS 7 you need to edit the CentOS-Base repofile to exclude PostgreSQL from Base and Updates.
$ nano /etc/yum.repos.d/CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #exclude PostgreSQL from os repository exclude=postgresql* #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$inf$ #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #exclude PostgreSQL from os repository exclude=postgresql* #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$$ [ Read 46 lines ]
By using CentOS 8 it is just one command to exclude PostgreSQL from the distribution repository:
$ dnf -y module disable postgresql
Add PostgreSQL Repository to CentOS 7, in this example it is ProstgreSQL 12
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
And the same for CentOS 8
$ dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Now it is time to install PostgreSQL 12 out of the PostgreSQL repository BUT NO INITDB at the moment.
CentOS 7:
$ yum install postgresql12 postgresql12-server postgresql12-contrib
CentOS 8:
$ dnf install postgresql12 postgresql12-server postgresql12-contrib
Now it is time to create the override file to the PostgreSQL Service file, the steps are identical on CentOS 7 and CentOS 8.
In my example PGDATA is in /pg_data/12/data mounted as own volume.
So edit the postgresql-12.service file with sysctl edit:
$ systemctl edit postgresql-12.service
And add the needed content for your customized PGDATA:
[Service] Environment=PGDATA=/pg_data/12/data
Save the change, it will create a /etc/systemd/system/postgresql-12.service.d/override.conf file which will be merged with the original service file.
To check the content:
$ cat /etc/systemd/system/postgresql-12.service.d/override.conf [Service] Environment=PGDATA=/pg_data/12/data
Reload Systemd
$ systemctl daemon-reload
Hopefully your PGATA is owned by the postgres user if not make sure that it is:
$ chown -R postgres:postgres /pg_data/
Create the PostgreSQL instance as root user:
$ /usr/pgsql-12/bin/postgresql-12-setup initdb Initializing database ... OK
Here it is:
[root@centos-8-blog /]# cd /pg_data/12/data/ [root@centos-8-blog data]# ls base pg_dynshmem pg_multixact pg_snapshots pg_tblspc pg_xact global pg_hba.conf pg_notify pg_stat pg_twophase postgresql.auto.conf log pg_ident.conf pg_replslot pg_stat_tmp PG_VERSION postgresql.conf pg_commit_ts pg_logical pg_serial pg_subtrans pg_wal
From now on PostgreSQL minor updates will be done with yum update on CentOS 7 or dnf update on CentOS 8 in one step, no extra downtime for it.
But be careful, before running yum update or dnf update STOP ALL POSTGRESQL INSTANCES!
This is also working in environments with many instances, you need a service file and an override.conf for each instance, an additional instance needs to be created with initdb -D and not with PostgreSQL-12-setup initdb.
This method is also working with SLES 12.
Cet article Handling PostgreSQL installations from packages est apparu en premier sur Blog dbi services.