/usr/sbin/gm-restore_data is in gnumed-server 16.17-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | #!/bin/bash
#==============================================================
# This script tries to restore a GNUmed database from a
# data-only backup. It tries to be very conservative. It is
# intended for interactive use and will have to be adjusted
# to your needs.
#
# author: Karsten Hilbert
# license: GPL v2 or later
#
#==============================================================
TARGET_DATABASE="$1"
BACKUP="$2"
if test -z ${BACKUP} ; then
	echo "============================================================="
	echo "usage: $0 <target database> <backup file>"
	echo ""
	echo " <target database>: a GNUmed database (such as \"gnumed_v9\")"
	echo " <backup file>: a backup-gnumed_vX-*-data_only.tar[.bz2] file"
	echo "============================================================="
	exit 1
fi
echo ""
echo "==> Trying to restore a GNUmed backup ..."
echo "    file: ${BACKUP}"
if test ! -r ${BACKUP} ; then
	echo "    ERROR: Cannot access backup file. Aborting."
	exit 1
fi
echo ""
echo "==> Reading configuration ..."
CONF="/etc/gnumed/gnumed-restore.conf"
if [ -r ${CONF} ] ; then
	. ${CONF}
else
	echo "    ERROR: Cannot read configuration file ${CONF}. Aborting."
	exit 1
fi
echo ""
echo "==> Testing target database status ..."
if test `sudo -u postgres psql -l -p ${GM_PORT} | grep ${TARGET_DB} | wc -l` -eq 0 ; then
	echo "    ERROR: Target database ${TARGET_DB} does not exist. Aborting."
	echo ""
	echo "    This database must contain the GNUmed schema of the proper"
	echo "    version. It must not contain any data, however."
	echo "    Use the bootstrapper the create an appropriate database"
	echo "    and the gmDBPruningDMLGenerator.py script to empty it."
	exit 1
fi
if [[ "$BACKUP" =~ .*\.bz2 ]] ; then
	echo ""
	echo "==> Testing backup file integrity ..."
	bzip2 -tv $BACKUP
	if test $? -ne 0 ; then
		echo "    ERROR: Integrity check failed. Aborting."
		echo ""
		echo "    You may want to try recovering data with bzip2recover."
		exit 1
	fi
fi
echo ""
echo "==> Setting up workspace ..."
TS=`date +%Y-%m-%d-%H-%M-%S`
WORK_DIR="${WORK_DIR_BASE}/gm-restore-${TS}/"
echo "    ${WORK_DIR}"
mkdir -p ${WORK_DIR}
if test $? -ne 0 ; then
	echo "    ERROR: Cannot create workspace. Aborting."
	exit 1
fi
cd ${WORK_DIR}
echo ""
echo "==> Creating copy of backup file ..."
cp -v ${BACKUP} ${WORK_DIR}
if test $? -ne 0 ; then
	echo "    ERROR: Cannot copy backup file. Aborting."
	exit 1
fi
echo ""
echo "==> Unpacking backup file ..."
BACKUP=${WORK_DIR}/`basename ${BACKUP}`
if [[ "$BACKUP" =~ .*\.bz2 ]] ; then
	bunzip2 -v ${BACKUP}
	if test $? -ne 0 ; then
		echo "    ERROR: Cannot unpack (bzip2) backup file. Aborting."
		exit 1
	fi
	BACKUP=`basename ${BACKUP} .bz2`
fi
tar -xvvf ${BACKUP}
if test $? -ne 0 ; then
	echo "    ERROR: Cannot unpack (tar) backup file. Aborting."
	exit 1
fi
BACKUP=`basename ${BACKUP} .tar`
echo ""
echo "==> Restoring GNUmed data ..."
LOG="${LOG_BASE}/restoring-data-${TARGET_DATABASE}-${TS}.log"
sudo -u postgres psql -p ${GM_PORT} -d ${TARGET_DATABASE} --single-transaction -f ${BACKUP}-data_only.sql &> ${LOG}
if test $? -ne 0 ; then
	echo "    ERROR: failed to restore data. Aborting."
	echo "           see: ${LOG}"
	sudo -u postgres chmod 0666 ${LOG}
	exit 1
fi
sudo -u postgres chmod 0666 ${LOG}
echo ""
echo "==> Analyzing database ${TARGET_DB} ..."
# --full doesn't make sense since there are no
# deleted rows in a freshly restored database but
# we need to update statistics to get decent performance
LOG="${LOG_BASE}/analyzing-database-${TS}.log"
sudo -u postgres vacuumdb -v -z -d ${TARGET_DB} -p ${GM_PORT} &> ${LOG}
sudo -u postgres chmod 0666 ${LOG}
echo ""
echo "==> Cleaning up ..."
rm -vf ${WORK_DIR}/*
rmdir -v ${WORK_DIR}
cd -
exit 0
#==============================================================
 |