Ein Ansatz für solche Probleme kann darin bestehen, es in kleineren Stücken zu tun.
DELETE FROM "contacts"
WHERE "contacts"."id" IN (
SELECT id
FROM contacts
LEFT OUTER JOIN members ON members.contact_id = contacts.id
WHERE members.id IS NULL
AND id >= 1 AND id < 1000
);
DELETE FROM "contacts"
WHERE "contacts"."id" IN (
SELECT id
FROM contacts
LEFT OUTER JOIN members ON members.contact_id = contacts.id
WHERE members.id IS NULL
AND id >= 1001 AND id < 2000
);
Spülen, wiederholen. Experimentieren Sie mit verschiedenen Chunk-Größen, um eine optimale Größe für Ihren Datensatz zu finden, die die wenigsten Abfragen verwendet und alle im Speicher behält.
Natürlich möchten Sie dies skripten, möglicherweise in plpgsql oder in einer anderen Skriptsprache, die Sie bevorzugen.