#!/bin/sh set -e echo "=== Настройка репликации ===" echo "Этот узел: NODE_ID=${NODE_ID}" echo "Удаленный хост: ${REMOTE_HOST}" echo "Ждем локальную базу..." sleep 10 until PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c '\q' 2>/dev/null; do echo "Локальная база не готова, ждем..." sleep 2 done echo "Локальная база готова" echo "Настройка генераторов ID (NODE_ID=${NODE_ID})..." PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" </dev/null; do sleep 5 ELAPSED=$((ELAPSED + 5)) if [ $ELAPSED -ge $TIMEOUT ]; then echo "Таймаут ожидания удаленного хоста. Репликация НЕ настроена." echo "Вы можете запустить этот скрипт вручную позже:" echo "docker compose restart replication-setup" exit 0 fi echo "Удаленный хост недоступен, ждем... (${ELAPSED}s/${TIMEOUT}s)" done echo "Удаленный хост доступен" EXISTING=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -tAc "SELECT COUNT(*) FROM pg_subscription WHERE subname = 'sub_from_remote';") if [ "$EXISTING" -gt 0 ]; then echo "Подписка уже существует, пропускаем создание" else echo "Создаем подписку на удаленный хост..." PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <