diff --git a/src/modules/parcel-sync/services/no-geom-sync.ts b/src/modules/parcel-sync/services/no-geom-sync.ts index 37020af..0270303 100644 --- a/src/modules/parcel-sync/services/no-geom-sync.ts +++ b/src/modules/parcel-sync/services/no-geom-sync.ts @@ -537,9 +537,12 @@ export async function syncNoGeometryParcels( } if (staleIds.length > 0) { - await prisma.gisFeature.deleteMany({ - where: { id: { in: staleIds } }, - }); + const BATCH = 30_000; + for (let i = 0; i < staleIds.length; i += BATCH) { + await prisma.gisFeature.deleteMany({ + where: { id: { in: staleIds.slice(i, i + BATCH) } }, + }); + } console.log( `[no-geom-sync] Cleanup: removed ${staleIds.length} stale/invalid no-geom records`, ); diff --git a/src/modules/parcel-sync/services/sync-service.ts b/src/modules/parcel-sync/services/sync-service.ts index c81bd66..f627749 100644 --- a/src/modules/parcel-sync/services/sync-service.ts +++ b/src/modules/parcel-sync/services/sync-service.ts @@ -318,16 +318,19 @@ export async function syncLayer( // PostGIS not available yet — not critical, skip silently } - // Mark removed features + // Mark removed features (batch to avoid PostgreSQL 32767 bind variable limit) if (removedObjIds.length > 0) { push({ phase: "Marcare șterse" }); - await prisma.gisFeature.deleteMany({ - where: { - layerId, - siruta, - objectId: { in: removedObjIds }, - }, - }); + const BATCH = 30_000; + for (let i = 0; i < removedObjIds.length; i += BATCH) { + await prisma.gisFeature.deleteMany({ + where: { + layerId, + siruta, + objectId: { in: removedObjIds.slice(i, i + BATCH) }, + }, + }); + } } // Update sync run