Sync Repo
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# -------------------------------------------------------------------------------------
|
||||
# A backup and restore strategy for PostgreSQL with "pg_dump" and "pg_restore" commands.
|
||||
# -------------------------------------------------------------------------------------
|
||||
|
||||
check_command "pg_dump"
|
||||
check_command "psql"
|
||||
check_command "pg_restore"
|
||||
|
||||
# Make use of PostgreSQL 9.3+ options if available
|
||||
if [[ ${psql_majorminor} -ge 9003 ]]; then
|
||||
PG_PARALLEL="-j 5"
|
||||
PG_SNAPSHOT_OPT="--no-synchronized-snapshots"
|
||||
fi
|
||||
|
||||
function prepare_backup_db {
|
||||
check_config_var "CONFLUENCE_BACKUP_DB"
|
||||
check_config_var "POSTGRES_USERNAME"
|
||||
check_config_var "POSTGRES_HOST"
|
||||
check_config_var "POSTGRES_PORT"
|
||||
check_config_var "CONFLUENCE_DB"
|
||||
}
|
||||
|
||||
function backup_db {
|
||||
[ -d "${CONFLUENCE_BACKUP_DB}" ] && rm -r "${CONFLUENCE_BACKUP_DB}"
|
||||
mkdir -p "${CONFLUENCE_BACKUP_DB}"
|
||||
run pg_dump -U "${POSTGRES_USERNAME}" -h "${POSTGRES_HOST}" --port=${POSTGRES_PORT} ${PG_PARALLEL} -Fd \
|
||||
-d "${CONFLUENCE_DB}" ${PG_SNAPSHOT_OPT} -f "${CONFLUENCE_BACKUP_DB}"
|
||||
}
|
||||
|
||||
function prepare_restore_db {
|
||||
check_config_var "POSTGRES_USERNAME"
|
||||
check_config_var "POSTGRES_HOST"
|
||||
check_config_var "POSTGRES_PORT"
|
||||
check_var "CONFLUENCE_RESTORE_DB"
|
||||
|
||||
if run psql -U "${POSTGRES_USERNAME}" -h "${POSTGRES_HOST}" --port=${POSTGRES_PORT} -d "${CONFLUENCE_DB}" -c "" 2>/dev/null; then
|
||||
local table_count=$(psql -U "${POSTGRES_USERNAME}" -h "${POSTGRES_HOST}" --port=${POSTGRES_PORT} -d "${CONFLUENCE_DB}" -tqc '\dt' | grep -v "^$" | wc -l)
|
||||
if [ "${table_count}" -gt 0 ]; then
|
||||
error "Database '${CONFLUENCE_DB}' already exists and contains ${table_count} tables"
|
||||
else
|
||||
error "Database '${CONFLUENCE_DB}' already exists"
|
||||
fi
|
||||
bail "Cannot restore over existing database '${CONFLUENCE_DB}', please ensure it does not exist before restoring"
|
||||
fi
|
||||
}
|
||||
|
||||
function restore_db {
|
||||
run pg_restore -U "${POSTGRES_USERNAME}" -h "${POSTGRES_HOST}" --port=${POSTGRES_PORT} ${PG_PARALLEL} \
|
||||
-d postgres -C -Fd "${CONFLUENCE_RESTORE_DB}"
|
||||
}
|
||||
|
||||
function cleanup_incomplete_db_backup {
|
||||
info "Cleaning up DB backup created as part of failed/incomplete backup"
|
||||
rm -r "${CONFLUENCE_BACKUP_DB}"
|
||||
}
|
||||
|
||||
function cleanup_old_db_backups {
|
||||
# Not required as old backups with this strategy are typically cleaned up in the archiving strategy.
|
||||
no_op
|
||||
}
|
||||
Reference in New Issue
Block a user