Een benadering van dit soort problemen kan zijn om het in kleinere brokken te doen.
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
);
Spoel, herhaal. Experimenteer met verschillende chunk-groottes om de optimale voor uw dataset te vinden, die de minste zoekopdrachten gebruikt, terwijl ze allemaal in het geheugen worden bewaard.
Natuurlijk zou je dit willen scripten, mogelijk in plpgsql, of in welke scripttaal dan ook.