Я не думаю, что вы можете делать это партиями, потому что он не будет знать, какие строки изготовить для выполнения «FULL OUTER», не увидев всех данных. Возможно, вы сможете обойти это, если знаете, что никто не вносит изменения в таблицы, пока вы работаете, путем выбора кортежей только для левых, только для правых и внутренних кортежей в отдельных запросах.
Но он не должен занимать всю вашу память (при условии, что вы имеете в виду ОЗУ, а не дисковое пространство) на сервере, потому что он должен использовать временные файлы вместо ОЗУ для основной части необходимого хранилища (хотя есть некоторые проблемы с использованием памяти для огромных ha sh присоединяется, поэтому вы можете попробовать set enable_hashjoin=off
).
Клиент может использовать слишком много памяти, так как он может попытаться прочитать весь набор результатов сразу в ОЗУ клиента. Есть способы обойти это, но они, вероятно, не связаны с манипулированием самим JOIN. Вы можете использовать курсор для пакетного чтения из одного потока результатов, или вы можете просто записать результаты на диск с помощью \ copy, а затем использовать что-то вроде GNU split
на нем.