read_replicate/replicate_upgrade_teardown.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
set -euo pipefail
# Drop the Capgo Google EU2 subscription + source slot so Supabase can upgrade.
# Loads DB URLs from internal/cloudflare/.env.prod. No env exports required.
# Exits nonzero unless subscription and source slot are verified gone.
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=read_replicate/common.sh
source "${SCRIPT_DIR}/common.sh"
echo "==> Preparing Capgo-EU for Supabase Postgres upgrade (teardown replication)..."
load_replica_target
load_source
PUBLICATION_NAME="$(discover_publication_name)"
DEFAULT_SUBSCRIPTION_NAME="capgo_google_$(replica_region_name)"
discover_subscription "$DEFAULT_SUBSCRIPTION_NAME"
print_target_summary
echo "==> Publication: ${PUBLICATION_NAME}"
echo "==> Dropping target subscription ${REPLICA_SUBSCRIPTION_NAME} if present..."
SUB_EXISTS=$(psql-17 "$REPLICA_TARGET_DB_URL" -t -A -v ON_ERROR_STOP=1 -c "
SELECT 1
FROM pg_subscription
WHERE subname = '${REPLICA_SUBSCRIPTION_NAME}';
")
if [[ -n "$SUB_EXISTS" ]]; then
# DISABLE / detach slot may already be done; ignore those, but DROP must succeed.
psql-17 "$REPLICA_TARGET_DB_URL" -v ON_ERROR_STOP=0 -c "ALTER SUBSCRIPTION ${REPLICA_SUBSCRIPTION_NAME} DISABLE;" || true
sleep 2
psql-17 "$REPLICA_TARGET_DB_URL" -v ON_ERROR_STOP=0 -c "ALTER SUBSCRIPTION ${REPLICA_SUBSCRIPTION_NAME} SET (slot_name = NONE);" || true
psql-17 "$REPLICA_TARGET_DB_URL" -v ON_ERROR_STOP=1 -c "DROP SUBSCRIPTION IF EXISTS ${REPLICA_SUBSCRIPTION_NAME};"
echo " Dropped subscription ${REPLICA_SUBSCRIPTION_NAME}"
else
echo " No target subscription named ${REPLICA_SUBSCRIPTION_NAME}"
fi
echo "==> Verifying subscription is gone on target..."
SUB_REMAINING=$(psql-17 "$REPLICA_TARGET_DB_URL" -t -A -v ON_ERROR_STOP=1 -c "
SELECT subname
FROM pg_subscription
WHERE subname = '${REPLICA_SUBSCRIPTION_NAME}';
")
if [[ -n "$SUB_REMAINING" ]]; then
echo "Error: subscription ${REPLICA_SUBSCRIPTION_NAME} still exists on target. Fix before upgrading."
exit 1
fi
drop_source_slot_with_retry "${REPLICA_SLOT_NAME}" "${SOURCE_DB_URL}"
echo "==> Verifying slot is gone on source..."
REMAINING=$(psql-17 "$SOURCE_DB_URL" -t -A -v ON_ERROR_STOP=1 -c "
SELECT slot_name
FROM pg_replication_slots
WHERE slot_name = '${REPLICA_SLOT_NAME}';
")
if [[ -n "$REMAINING" ]]; then
echo "Error: slot ${REPLICA_SLOT_NAME} still exists. Fix before upgrading."
exit 1
fi
echo ""
echo "Teardown complete. Next:"
echo " 1) Run the Supabase Postgres upgrade in the Capgo-EU dashboard"
echo " 2) After the project is healthy: bun run readreplicate:upgrade:reconnect"
echo " 3) Verify: bun run readreplicate:status"