wrolpi/scripts/reset_api_db.sh
Roland 7bf7d9aa66
reset_api_db.sh: heal Postgres cluster ownership before resetting.
If cluster files lose postgres ownership (stray recursive chown,
interrupted install), the postmaster stays up but every new backend
dies with FATAL: could not open file "global/pg_filenode.map":
Permission denied — and dropdb/psql cannot work either.  Restore
ownership of /var/lib/postgresql and /etc/postgresql and restart
postgres before recreating the database, and start the API when done.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 13:31:38 -06:00

34 lines
1 KiB
Bash
Executable file

#!/usr/bin/env bash
source /opt/wrolpi/wrolpi/scripts/lib.sh
# Re-execute this script if it wasn't called with sudo.
if [ $EUID != 0 ]; then
sudo "$0" "$@"
exit $?
fi
if psql -l 2>/dev/null | grep wrolpi >/dev/null; then
yes_or_no "Are you sure you want to reset the API database? All data will be lost." || exit 0
fi
set -x
systemctl stop wrolpi-api
# Heal Postgres cluster ownership before touching the database. A stray recursive chown or an
# interrupted install can leave cluster files unreadable by the server; new backends then die
# with: FATAL: could not open file "global/pg_filenode.map": Permission denied
if id postgres >/dev/null 2>&1; then
[ -d /var/lib/postgresql ] && chown -R postgres:postgres /var/lib/postgresql
[ -d /etc/postgresql ] && chown -R postgres:postgres /etc/postgresql
systemctl restart postgresql
fi
# Delete the WROLPi API DB, if it exists.
sudo -iu postgres dropdb wrolpi
sudo -iu postgres dropuser wrolpi
/bin/bash /opt/wrolpi/scripts/initialize_api_db.sh
systemctl start wrolpi-api