#!/bin/bash set -e # Configuration from environment variables PRIMARY_HOST="${PRIMARY_HOST:-db}" PRIMARY_PORT="${PRIMARY_PORT:-5432}" REPLICATOR_USER="${REPLICATOR_USER:-replicator}" REPLICATOR_PASSWORD="${REPLICATOR_PASSWORD:-PASSWORD-PLACEHOLDER--replicatorpass}" RECOVERY_MIN_APPLY_DELAY="${RECOVERY_MIN_APPLY_DELAY:-100ms}" echo "Starting PostgreSQL replica with ${RECOVERY_MIN_APPLY_DELAY} apply delay..." # Wait for primary to be ready echo "Waiting for primary at ${PRIMARY_HOST}:${PRIMARY_PORT}..." until PGPASSWORD="${REPLICATOR_PASSWORD}" pg_isready -h "${PRIMARY_HOST}" -p "${PRIMARY_PORT}" -U "${REPLICATOR_USER}" 2>/dev/null; do echo "Primary not ready yet, waiting..." sleep 2 done echo "Primary is ready!" # If PGDATA is empty, do a base backup from primary if [ -z "$(ls -A ${PGDATA} 2>/dev/null)" ]; then echo "PGDATA is empty, performing base backup from primary..." # Perform base backup PGPASSWORD="${REPLICATOR_PASSWORD}" pg_basebackup \ -h "${PRIMARY_HOST}" \ -p "${PRIMARY_PORT}" \ -U "${REPLICATOR_USER}" \ -D "${PGDATA}" \ -Fp \ -Xs \ -P \ -R echo "Base backup completed!" # Configure recovery settings with apply delay cat >> "${PGDATA}/postgresql.auto.conf" <