diff --git a/deploy/DEPLOY.md b/deploy/DEPLOY.md index d3f28a7..aa27dd8 100644 --- a/deploy/DEPLOY.md +++ b/deploy/DEPLOY.md @@ -159,8 +159,9 @@ repair script re-applies grants. `REPLICA_DSNS` must connect as a role that can `deploy/replicas.env` exists on that host. Keep migrations schema-only. After each migrate, subscribers get -`ALTER SUBSCRIPTION … REFRESH PUBLICATION WITH (copy_data = true)` so **new -tables** join replication (Postgres does not add them by itself). +`ALTER SUBSCRIPTION … REFRESH PUBLICATION WITH (copy_data = false)` so **new +tables** join the subscription without a second full copy (repair already +copied rows; a second copy unique-conflicts and stalls live UPDATEs). ## 9) Data changes **without** deploy (import settings, edit tenant, …) diff --git a/deploy/sync-replica-data.sh b/deploy/sync-replica-data.sh index 6c49be9..cff14b7 100644 --- a/deploy/sync-replica-data.sh +++ b/deploy/sync-replica-data.sh @@ -322,7 +322,7 @@ repair_replica() { run_psql "$(libpq_dsn "$replica_dsn")" -v ON_ERROR_STOP=1 -q \ -c "ALTER SUBSCRIPTION \"${sub}\" ENABLE" run_psql "$(libpq_dsn "$replica_dsn")" -v ON_ERROR_STOP=1 -q \ - -c "ALTER SUBSCRIPTION \"${sub}\" REFRESH PUBLICATION" || true + -c "ALTER SUBSCRIPTION \"${sub}\" REFRESH PUBLICATION WITH (copy_data = false)" || true done echo " repair done" diff --git a/deploy/sync-replica-schema.sh b/deploy/sync-replica-schema.sh index 73b6558..b3506b4 100644 --- a/deploy/sync-replica-schema.sh +++ b/deploy/sync-replica-schema.sh @@ -192,10 +192,11 @@ refresh_subscriptions() { return 0 fi for sub in "${subs[@]}"; do - echo " ALTER SUBSCRIPTION $sub REFRESH PUBLICATION (copy_data)" - # New tables added to FOR ALL TABLES are NOT replicated until this runs. + echo " ALTER SUBSCRIPTION $sub REFRESH PUBLICATION (copy_data=false)" + # Do not recopy existing tables — that starts tablesync workers which + # unique-conflict with data already on the replica and block live UPDATEs. run_psql "$(libpq_dsn "$dsn")" -v ON_ERROR_STOP=1 -q \ - -c "ALTER SUBSCRIPTION \"${sub}\" REFRESH PUBLICATION WITH (copy_data = true)" + -c "ALTER SUBSCRIPTION \"${sub}\" REFRESH PUBLICATION WITH (copy_data = false)" done }