From b4569c14df3cde77dc2cee243eb58f23086c75d2 Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Sun, 6 Feb 2022 22:28:21 +0100 Subject: [PATCH] Update database README. Document how to create a Dougal database from scratch and how to update PostgreSQL. --- etc/db/README.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/etc/db/README.md b/etc/db/README.md index c469160..0797d11 100644 --- a/etc/db/README.md +++ b/etc/db/README.md @@ -19,3 +19,79 @@ Created with: ```bash SCHEMA_NAME=survey_X EPSG_CODE=XXXXX $DOUGAL_ROOT/sbin/dump_schema.sh ``` + +## To create a new Dougal database + +Ensure that the following packages are installed: + +* `postgresql*-postgis-utils` +* `postgresql*-postgis` +* `postgresql*-contrib` # For B-trees + +```bash +psql -U postgres <./database-template.sql +``` + +--- + +# Upgrading PostgreSQL + +The following is based on https://en.opensuse.org/SDB:PostgreSQL#Upgrading_major_PostgreSQL_version + +```bash +# The following bash code should be checked and executed +# line for line whenever you do an upgrade. The example +# shows the upgrade process from an original installation +# of version 12 up to version 14. + +# install the new server as well as the required postgresql-contrib packages: +zypper in postgresql14-server postgresql14-contrib postgresql12-contrib + +# If not yet done, copy the configuration create a new PostgreSQL configuration directory... +mkdir /etc/postgresql +# and copy the original file to this global directory +cd /srv/pgsql/data +for i in pg_hba.conf pg_ident.conf postgresql.conf postgresql.auto.conf ; do cp -a $i /etc/postgresql/$i ; done + +# Now create a new data-directory and initialize it for usage with the new server +install -d -m 0700 -o postgres -g postgres /srv/pgsql/data14 +cd /srv/pgsql/data14 +sudo -u postgres /usr/lib/postgresql14/bin/initdb . + +# replace the newly generated files by a symlink to the global files. +# After doing so, you may check the difference of the created backup files and +# the files from the former installation +for i in pg_hba.conf pg_ident.conf postgresql.conf postgresql.auto.conf ; do old $i ; ln -s /etc/postgresql/$i .; done + +# Copy over special thesaurus files if some exists. +#cp -a /usr/share/postgresql12/tsearch_data/my_thesaurus_german.ths /usr/share/postgresql14/tsearch_data/ + +# Now it's time to disable the service... +systemctl stop postgresql.service + +# And to start the migration. Please ensure, the directories fit to your upgrade path +sudo -u postgres /usr/lib/postgresql14/bin/pg_upgrade --link \ + --old-bindir="/usr/lib/postgresql12/bin" \ + --new-bindir="/usr/lib/postgresql14/bin" \ + --old-datadir="/srv/pgsql/data/" \ + --new-datadir="/srv/pgsql/data14/" + +# After successfully migrating the data... +cd .. +# if not already symlinked move the old data to a versioned directory matching +# your old installation... +mv data data12 +# and set a symlink to the new data directory +ln -sf data14/ data + +# Now start the new service +systemctl start postgresql.service + +# If everything has been sucessful, you should uninstall old packages... +#zypper rm -u postgresql12 postgresql13 +# and remove old data directories +#rm -rf /srv/pgsql/data_OLD_POSTGRES_VERSION_NUMBER + +# For good measure: +sudo -u postgres /usr/lib/postgresql14/bin/vacuumdb --all --analyze-in-stages +```