Jedním z přístupů k problémům, jako je tento, může být dělat to po menších kouscích.
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
);
Opláchněte, opakujte. Experimentujte s různými velikostmi bloků, abyste našli optimální blok pro svůj soubor dat, který využívá nejméně dotazů a zároveň je všechny uchovává v paměti.
Přirozeně byste to chtěli naskriptovat, možná v plpgsql nebo v jakémkoli skriptovacím jazyce, který preferujete.