初始化
This commit is contained in:
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# PostgreSQL standby bootstrap entrypoint
|
||||
# If data dir is empty, pull base backup from primary, then hand off to postgres entrypoint
|
||||
|
||||
PRIMARY_HOST="${PG_PRIMARY_HOST:-host1}"
|
||||
PRIMARY_PORT="${PG_PRIMARY_PORT:-5432}"
|
||||
REPL_PASSWORD="${REPL_PASSWORD:-Bjang09@686-Repl}"
|
||||
PGDATA="/var/lib/postgresql/data"
|
||||
|
||||
if [ ! -s "$PGDATA/PG_VERSION" ]; then
|
||||
echo "[standby] Data directory empty, bootstrapping from primary $PRIMARY_HOST:$PRIMARY_PORT"
|
||||
|
||||
# Wait for primary to accept connections
|
||||
for i in $(seq 1 30); do
|
||||
if PGPASSWORD="$REPL_PASSWORD" pg_isready -h "$PRIMARY_HOST" -p "$PRIMARY_PORT" -U replicator >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
echo "[standby] Waiting for primary to be ready (attempt $i/30)..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Pull base backup from primary
|
||||
echo "[standby] Running pg_basebackup..."
|
||||
PGPASSWORD="$REPL_PASSWORD" pg_basebackup -h "$PRIMARY_HOST" -p "$PRIMARY_PORT" \
|
||||
-U replicator -D "$PGDATA" -P -R \
|
||||
-S replication_slot_slave --checkpoint=fast --wal-method=stream
|
||||
|
||||
# Ensure standby signal file exists
|
||||
touch "$PGDATA/standby.signal"
|
||||
|
||||
echo "[standby] Bootstrap complete, starting standby..."
|
||||
fi
|
||||
|
||||
# Hand off to the standard postgres entrypoint
|
||||
exec /usr/local/bin/docker-entrypoint.sh "$@"
|
||||
Reference in New Issue
Block a user