WIP Prepare postgres for migration by replication
This commit is contained in:
31
site-cookbooks/kosmos_postgresql/files/create_publication.sh
Normal file
31
site-cookbooks/kosmos_postgresql/files/create_publication.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
DB_NAME="${1:?Usage: $0 <database_name>}"
|
||||
|
||||
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 =="
|
||||
Reference in New Issue
Block a user