Исправление репликации

This commit is contained in:
2026-01-31 01:30:07 +03:00
parent 0e159df16e
commit 6014db3c81
+28 -4
View File
@@ -36,6 +36,20 @@ BEGIN
END \$\$; END \$\$;
EOF EOF
echo "Проверяем/создаем публикацию..."
PUB_EXISTS=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -tAc "SELECT COUNT(*) FROM pg_publication WHERE pubname = 'all_tables_pub';")
if [ "$PUB_EXISTS" -gt 0 ]; then
echo "Публикация уже существует"
else
echo "Создаем публикацию..."
PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <<EOF
CREATE PUBLICATION all_tables_pub FOR ALL TABLES;
EOF
echo "Публикация создана!"
fi
echo "Ждем удаленный хост ${REMOTE_HOST}:${REMOTE_PORT}..." echo "Ждем удаленный хост ${REMOTE_HOST}:${REMOTE_PORT}..."
TIMEOUT=300 TIMEOUT=300
ELAPSED=0 ELAPSED=0
@@ -44,8 +58,9 @@ while ! PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${REMOTE_HOST}" -p ${REMOTE_P
sleep 5 sleep 5
ELAPSED=$((ELAPSED + 5)) ELAPSED=$((ELAPSED + 5))
if [ $ELAPSED -ge $TIMEOUT ]; then if [ $ELAPSED -ge $TIMEOUT ]; then
echo "Таймаут ожидания удаленного хоста. Репликация НЕ настроена." echo "Таймаут ожидания удаленного хоста. Подписка НЕ настроена."
echo "Вы можете запустить этот скрипт вручную позже:" echo "Публикация создана - удаленный хост сможет подписаться на нас."
echo "Для создания подписки запустите позже:"
echo "docker compose restart replication-setup" echo "docker compose restart replication-setup"
exit 0 exit 0
fi fi
@@ -53,6 +68,14 @@ while ! PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${REMOTE_HOST}" -p ${REMOTE_P
done done
echo "Удаленный хост доступен" echo "Удаленный хост доступен"
REMOTE_PUB=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${REMOTE_HOST}" -p ${REMOTE_PORT} -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -tAc "SELECT COUNT(*) FROM pg_publication WHERE pubname = 'all_tables_pub';" 2>/dev/null || echo "0")
if [ "$REMOTE_PUB" -eq 0 ]; then
echo "ВНИМАНИЕ: На удалённом хосте нет публикации 'all_tables_pub'!"
echo "Подписка не будет создана. Сначала запустите скрипт на удалённом хосте."
exit 0
fi
EXISTING=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h db -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -tAc "SELECT COUNT(*) FROM pg_subscription WHERE subname = 'sub_from_remote';") 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 if [ "$EXISTING" -gt 0 ]; then
@@ -73,5 +96,6 @@ EOF
fi fi
echo "" echo ""
echo "Репликация настроена!" echo "=== Репликация настроена! ==="
echo "Этот узел (${NODE_ID}) теперь синхронизирован с ${REMOTE_HOST}" echo "Публикация: all_tables_pub (другие могут подписаться на нас)"
echo "Подписка: sub_from_remote (мы получаем данные от ${REMOTE_HOST})"