zkt26/skuska/postgres/start-postgres.sh
Bohdan Kapliuk 15f4373858 skuska
2026-05-13 19:50:55 +03:00

37 lines
1.0 KiB
Bash

#!/bin/sh
set -eu
export PGDATA="${PGDATA:-/tmp/postgres-data}"
BACKUP_DIR="${BACKUP_DIR:-/backup}"
LATEST_BACKUP="$BACKUP_DIR/latest.sql"
INIT_DIR="/docker-entrypoint-initdb.d"
mkdir -p "$BACKUP_DIR" "$INIT_DIR"
if [ ! -s "$PGDATA/PG_VERSION" ] && [ -s "$LATEST_BACKUP" ]; then
echo "Found persistent backup at $LATEST_BACKUP, preparing restore on first init."
cp "$LATEST_BACKUP" "$INIT_DIR/001-restore.sql"
fi
docker-entrypoint.sh "$@" &
postgres_pid="$!"
until pg_isready -h 127.0.0.1 -U "$POSTGRES_USER" -d "$POSTGRES_DB"; do
echo "Waiting for PostgreSQL before backup loop..."
sleep 5
done
while kill -0 "$postgres_pid" 2>/dev/null; do
if PGPASSWORD="$POSTGRES_PASSWORD" pg_dump -h 127.0.0.1 -U "$POSTGRES_USER" "$POSTGRES_DB" > "$BACKUP_DIR/latest.sql.tmp"; then
mv "$BACKUP_DIR/latest.sql.tmp" "$LATEST_BACKUP"
echo "Persistent backup updated at $LATEST_BACKUP"
else
echo "Persistent backup failed"
rm -f "$BACKUP_DIR/latest.sql.tmp"
fi
sleep "${BACKUP_INTERVAL_SECONDS:-60}"
done
wait "$postgres_pid"