r/postgresql-server: Add script to upgrade database
The `postgresql-upgrade.sh` script arranges to run `pg_upgrade` after a major PostgreSQL version update. It's scheduled by a systemd unit, _postgresql-upgrade.service_, which runs only after an OS update.dynamic-inventory
parent
0048a87630
commit
53b39338dd
|
@ -0,0 +1,18 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Upgrade PostgreSQL database cluster
|
||||||
|
Before=postgresql.service
|
||||||
|
Before=systemd-update-done.service
|
||||||
|
After=local-fs.target
|
||||||
|
RequiresMountsFor=/var/lib/pgsql
|
||||||
|
DefaultDependencies=no
|
||||||
|
ConditionNeedsUpdate=/var
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
User=postgres
|
||||||
|
ExecStart=+/usr/local/libexec/postgresql-upgrade
|
||||||
|
Environment=PG_COLOR=always
|
||||||
|
WorkingDirectory=~
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
RequiredBy=postgresql.service
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# vim: set sw=4 ts=4 sts=4 et :
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
CONFIG_DIR=/etc/postgresql
|
||||||
|
|
||||||
|
data_directory=$(
|
||||||
|
runuser -u postgres -- postgres -D "${CONFIG_DIR}" -C data_directory
|
||||||
|
)
|
||||||
|
old_version=$(cat "${data_directory}"/PG_VERSION)
|
||||||
|
current_version=$(postgres --version | sed -r 's/.*\s+([0-9]+).*/\1/')
|
||||||
|
|
||||||
|
if [ "${old_version}" = "${current_version}" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_dir_old="${CONFIG_DIR}.${old_version}"
|
||||||
|
rm -rf "${config_dir_old}"
|
||||||
|
cp -a "${CONFIG_DIR}" "${config_dir_old}"
|
||||||
|
|
||||||
|
sed -ri.orig \
|
||||||
|
-e 's/data_directory\s*=\s*'\''(.*?)'\''/data_directory = '\''\1.'"${old_version}"\''/' \
|
||||||
|
-e 's/^(\s*ssl\s*=\s*)(.*)$/\1off/' \
|
||||||
|
"${config_dir_old}"/postgresql.conf
|
||||||
|
sed -i.orig \
|
||||||
|
-e '$alocal all postgres peer' \
|
||||||
|
-e d \
|
||||||
|
"${config_dir_old}"/pg_hba.conf
|
||||||
|
mv "${data_directory}" "${data_directory}.${old_version}"
|
||||||
|
runuser -u postgres -- initdb -A peer --no-instructions "${data_directory}"
|
||||||
|
|
||||||
|
runuser -u postgres -- pg_upgrade \
|
||||||
|
-b "/usr/lib64/pgsql/postgresql-${old_version}"/bin \
|
||||||
|
-B /usr/bin \
|
||||||
|
-d "${config_dir_old}" \
|
||||||
|
-D "${CONFIG_DIR}" \
|
||||||
|
-o '-c restore_command= -c archive_command=' \
|
||||||
|
-O '-c restore_command= -c archive_command=' \
|
||||||
|
-k
|
|
@ -0,0 +1,2 @@
|
||||||
|
dependencies:
|
||||||
|
- systemd-base
|
|
@ -1,6 +1,8 @@
|
||||||
- name: ensure postgresql-server is installed
|
- name: ensure postgresql-server is installed
|
||||||
package:
|
package:
|
||||||
name: postgresql-server
|
name:
|
||||||
|
- postgresql-server
|
||||||
|
- postgresql-upgrade
|
||||||
state: present
|
state: present
|
||||||
tags:
|
tags:
|
||||||
- install
|
- install
|
||||||
|
@ -130,6 +132,35 @@
|
||||||
tags:
|
tags:
|
||||||
- systemd
|
- systemd
|
||||||
|
|
||||||
|
- name: ensure postgresql-upgrade script is installed
|
||||||
|
copy:
|
||||||
|
src: postgresql-upgrade.sh
|
||||||
|
dest: /usr/local/libexec/postgresql-upgrade
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rwx,go=rx
|
||||||
|
tags:
|
||||||
|
- postgresql-upgrade
|
||||||
|
- name: ensure postgresql-upgrade systemd unit is installed
|
||||||
|
copy:
|
||||||
|
src: postgresql-upgrade.service
|
||||||
|
dest: /etc/systemd/system/postgresql-upgrade.service
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,go=r
|
||||||
|
notify:
|
||||||
|
- reload systemd
|
||||||
|
tags:
|
||||||
|
- postgresql-upgrade
|
||||||
|
- systemd
|
||||||
|
|
||||||
|
- name: ensure postgresql-upgrade service starts when needed
|
||||||
|
service:
|
||||||
|
name: postgresql-upgrade
|
||||||
|
enabled: true
|
||||||
|
tags:
|
||||||
|
- postgresql-upgrade
|
||||||
|
- service
|
||||||
- name: ensure postgresql starts at boot
|
- name: ensure postgresql starts at boot
|
||||||
service:
|
service:
|
||||||
name: postgresql
|
name: postgresql
|
||||||
|
|
Loading…
Reference in New Issue