Một cách tiếp cận đối với những vấn đề như thế này có thể là giải quyết nó theo từng phần nhỏ hơn.
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
);
Rửa sạch, lặp lại. Thử nghiệm với các kích thước phân đoạn khác nhau để tìm một kích thước tối ưu cho tập dữ liệu của bạn, tập dữ liệu này sử dụng ít truy vấn nhất, trong khi vẫn giữ tất cả chúng trong bộ nhớ.
Đương nhiên, bạn muốn viết kịch bản này, có thể bằng plpgsql hoặc bằng bất kỳ ngôn ngữ viết lệnh nào bạn thích.