Salah satu pendekatan untuk masalah seperti ini adalah melakukannya dalam potongan yang lebih kecil.
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
);
Bilas, ulangi. Bereksperimenlah dengan ukuran potongan yang berbeda untuk menemukan yang optimal untuk kumpulan data Anda, yang menggunakan kueri paling sedikit, sekaligus menyimpan semuanya dalam memori.
Secara alami, Anda ingin membuat skrip ini, mungkin dalam plpgsql, atau dalam bahasa skrip apa pun yang Anda inginkan.