export PGPORT=$PLC_DB_PORT
# Install extensions
-function extend_db()
-{
- shopt -s nullglob
- for file in /usr/share/plc_api/extensions/*-up*; do
- script=${file##*/}
- name=${script%-up*}
- extension=${script##*.}
- version=$(psql -U $PLC_DB_USER --quiet --tuples-only --no-align -c \
- "SELECT version FROM plc_db_extensions WHERE name='$name' LIMIT 1" \
- $PLC_DB_NAME 2>/dev/null | awk 'BEGIN { ver=0 } /^[0-9]+$/ { ver=$1 } END { print ver }')
- if [ $version -eq 0 ]; then
- if [ "$extension" = "sql" ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
- elif [ -x $file ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- $file
- else
- dialog "\nWarning: extension $file not executable"
- fi
- check
- fi
- for file in /usr/share/plc_api/extensions/$name/migrations/[0-9]*-up-*; do
- script=${file##*/}
- index=${script%-up-*}
- extension=${script##*.}
- if [ $index -gt $version ] ; then
- if [ "$extension" = "sql" ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
- elif [ -x $file ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- $file
- else
- dialog "\nWarning: migration $file not executable"
+function extend_db() {
+ shopt -s nullglob
+ for file in /usr/share/plc_api/extensions/*-up*; do
+ script=${file##*/}
+ name=${script%-up*}
+ extension=${script##*.}
+ version=$(psql -U $PLC_DB_USER --quiet --tuples-only --no-align -c \
+ "SELECT version FROM plc_db_extensions WHERE name='$name' LIMIT 1" \
+ $PLC_DB_NAME 2>/dev/null | awk 'BEGIN { ver=0 } /^[0-9]+$/ { ver=$1 } END { print ver }')
+ if [ $version -eq 0 ]; then
+ if [ "$extension" = "sql" ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
+ elif [ -x $file ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ $file
+ else
+ dialog "\nWarning: extension $file not executable"
+ fi
+ check
fi
- check
- fi
+ for file in /usr/share/plc_api/extensions/$name/migrations/[0-9]*-up-*; do
+ script=${file##*/}
+ index=${script%-up-*}
+ extension=${script##*.}
+ if [ $index -gt $version ]; then
+ if [ "$extension" = "sql" ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
+ elif [ -x $file ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ $file
+ else
+ dialog "\nWarning: migration $file not executable"
+ fi
+ check
+ fi
+ done
done
- done
}
# Updates the database by applying all migration scripts in
# /usr/share/plc_api/migrations/N-up-*, where N is greater than the
# current subversion. At least one of the migration scripts with the
# same N must update plc_db_version.subversion.
-function migrate_db()
-{
- subversion=$(psql -U $PLC_DB_USER --quiet --tuples-only --no-align -c \
- "SELECT subversion FROM plc_db_version LIMIT 1" \
- $PLC_DB_NAME 2>/dev/null || echo 0)
- shopt -s nullglob
- for file in /usr/share/plc_api/migrations/[0-9]*-up-* ; do
- script=$(basename $file)
- index=${script%-up*}
- extension=${script##*.}
- if [ $index -gt $subversion ] ; then
- if [ "$extension" = "sql" ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
- elif [ -x $file ] ; then
- dialog " - $script (dbdumped)"
- dump_planetlab_db "before-$script"
- $file
- else
- dialog "\nWarning: migration $file not executable"
- fi
- check
- fi
- done
+function migrate_db() {
+ subversion=$(psql -U $PLC_DB_USER --quiet --tuples-only --no-align -c \
+ "SELECT subversion FROM plc_db_version LIMIT 1" \
+ $PLC_DB_NAME 2>/dev/null || echo 0)
+ shopt -s nullglob
+ for file in /usr/share/plc_api/migrations/[0-9]*-up-*; do
+ script=$(basename $file)
+ index=${script%-up*}
+ extension=${script##*.}
+ if [ $index -gt $subversion ]; then
+ if [ "$extension" = "sql" ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ psql -U $PLC_DB_USER -f $file $PLC_DB_NAME
+ elif [ -x $file ]; then
+ dialog " - $script (dbdumped)"
+ dump_planetlab_db "before-$script"
+ $file
+ else
+ dialog "\nWarning: migration $file not executable"
+ fi
+ check
+ fi
+ done
}
-function checkpoint_planetlab_db()
-{
- dumpfile=$1
- pg_dump -U $PLC_DB_USER $PLC_DB_NAME > $dumpfile
- check
+function checkpoint_planetlab_db() {
+ dumpfile=$1
+ pg_dump -U $PLC_DB_USER $PLC_DB_NAME >$dumpfile
+ check
}
-function restore_planetlab_db()
-{
- dumpfile=$1
- if [ -n "$dumpfile" ] ; then
- [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER $PLC_DB_NAME < $dumpfile
- check
- fi
+function restore_planetlab_db() {
+ dumpfile=$1
+ if [ -n "$dumpfile" ]; then
+ [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER $PLC_DB_NAME <$dumpfile
+ check
+ fi
}
# use a single date of this script invocation for the dump_*_db functions.
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
# Dumps the database - optional argument to specify filename suffix
-function dump_planetlab_db()
-{
- if [ -n "$1" ] ; then suffix="-$1" ; else suffix="" ; fi
- dumpfile=/var/lib/pgsql/backups/$(date +"${PLC_DB_NAME}.${DATE}${suffix}.sql")
- checkpoint_planetlab_db $dumpfile
+function dump_planetlab_db() {
+ if [ -n "$1" ]; then suffix="-$1"; else suffix=""; fi
+ dumpfile=/var/lib/pgsql/backups/$(date +"${PLC_DB_NAME}.${DATE}${suffix}.sql")
+ checkpoint_planetlab_db $dumpfile
}
-function restore_drupal_db()
-{
- dumpfile=$1
- if [ -n "$dumpfile" ] ; then
- [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER drupal < $1
- check
- fi
+function restore_drupal_db() {
+ dumpfile=$1
+ if [ -n "$dumpfile" ]; then
+ [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER drupal <$1
+ check
+ fi
}
-function checkpoint_drupal_db()
-{
- dumpfile=$1
- pg_dump -U $PLC_DB_USER drupal > $dumpfile
- check
+function checkpoint_drupal_db() {
+ dumpfile=$1
+ pg_dump -U $PLC_DB_USER drupal >$dumpfile
+ check
}
-function dump_drupal_db()
-{
- dumpfile=/var/lib/pgsql/backups/$(date +"drupal.${DATE}.sql")
- checkpoint_drupal_db $dumpfile
- check
+function dump_drupal_db() {
+ dumpfile=/var/lib/pgsql/backups/$(date +"drupal.${DATE}.sql")
+ checkpoint_drupal_db $dumpfile
+ check
}
# Clean up old backups
-function clean_dumps()
-{
- find /var/lib/pgsql/backups '(' -name "$PLC_DB_NAME.*.sql" -o -name "drupal.*.sql" ')' -a -atime +15 | xargs rm -f
- check
+function clean_dumps() {
+ find /var/lib/pgsql/backups '(' -name "$PLC_DB_NAME.*.sql" -o -name "drupal.*.sql" ')' -a -atime +15 | xargs rm -f
+ check
}
[ $PLC_DB_ENABLED -ne 1 ] && exit 0
case "$1" in
- start)
+start)
MESSAGE=$"Bootstrapping the database"
dialog "$MESSAGE"
result "$MESSAGE"
;;
- migrate)
+migrate)
MESSAGE=$"Migrating the database"
dialog "$MESSAGE"
result "$MESSAGE"
;;
- dump)
- MESSAGE=$"Dumping the databases in /var/lib/pgsql/backups"
+dump)
+ MESSAGE=$"Dumping the databases in /var/lib/pgsql/backups"
dialog "$MESSAGE"
dump_planetlab_db
result "$MESSAGE"
;;
- checkpoint)
+checkpoint)
MESSAGE=$"Checkpointing the databases"
checkpoint_planetlab_db $2
checkpoint_drupal_db $3
;;
- restore)
+restore)
MESSAGE=$"Restoring the databases from checkpoint files"
restore_planetlab_db $2
restore_drupal_db $3
;;
- clean-dump)
- MESSAGE=$"Cleaning old database dumps"
+clean-dump)
+ MESSAGE=$"Cleaning old database dumps"
dialog "$MESSAGE"
clean_dumps
result "$MESSAGE"
;;
- stop)
+stop)
MESSAGE="Ignoring request to stop myplc databases"
dialog "$MESSAGE"
result ""
;;
- *)
- echo "Usage: $0 [start|migrate|dump|checkpoint|restore|clean-dump|stop]"
+*)
+ echo "Usage: $0 [start|migrate|dump|checkpoint|restore|clean-dump|stop]"
exit 1
;;
esac