#!/bin/bash set -euo pipefail DB_NAME="${1:?Usage: $0 }" echo "== Processing DB: $DB_NAME ==" # Create publication (idempotent) psql -d "$DB_NAME" -v ON_ERROR_STOP=1 <<'SQL' DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_publication WHERE pubname = 'migrate_pub' ) THEN CREATE PUBLICATION migrate_pub FOR ALL TABLES; END IF; END $$; SQL # Create logical replication slot (idempotent-ish) SLOT="migrate_slot_${DB_NAME}" if ! psql -d "$DB_NAME" -Atqc "SELECT 1 FROM pg_replication_slots WHERE slot_name = '$SLOT'" | grep -q 1; then echo " Creating slot: $SLOT" psql -d "$DB_NAME" -c "SELECT pg_create_logical_replication_slot('$SLOT', 'pgoutput');" else echo " Slot already exists: $SLOT" fi echo "== Done =="