Я пытаюсь обновить таблицу в pSQL и получаю всевозможные ошибки памяти / выполнения.
Странно то, что запрос SELECT для обновления очень быстрый. Я уверен, что просто не понимаю, что происходит под капотом.
Некоторый контекст.
Соответствующие таблицы
address_book:
loan_id,
county,
zip
---
loan:
id
---
loan_property:
loan_id,
property_id
---
property:
id,
zip,
county
Цель
Цель состоит в том, чтобы обновить zip & county таблицы свойств значениями в address_book. В address_book есть loan_id, который является соединением со свойством.
SQL
Давайте посмотрим на простой SELECT
WITH ab AS (
SELECT DISTINCT
left(ab.loan_id, 6) AS loan_id,
ab.zip AS zip,
ab.county AS county
FROM
address_book ab
WHERE
ab.address IS NOT NULL
)
SELECT ab.county, p.name
FROM property p
INNER JOIN loan_property lp ON lp.property_id = p.id
INNER JOIN loan l ON lp.loan_id = l.id
INNER JOIN ab ON ab.loan_id = l.id
WHERE
l.id = ab.loan_id
Это работает отлично и очень быстро (.4 сек. На ~ 10 тыс. Записей)
Давайте возьмем вышеприведенное и сделаем вызов UPDATE:
WITH ab AS (
SELECT DISTINCT
left(ab.loan_id, 6) AS loan_id,
ab.zip AS zip,
ab.county AS county
FROM
address_book ab
WHERE
ab.address IS NOT NULL
)
UPDATE property
SET zip=ab.zip, county=ab.county
FROM property p
INNER JOIN loan_property lp ON lp.property_id = p.id
INNER JOIN loan l ON lp.loan_id = l.id
INNER JOIN ab ON ab.loan_id = l.id
WHERE
l.id = ab.loan_id
Это обновление выполняется в течение 2 минут, а затем, как правило, происходит сбой на основе
Ошибка SQL [53200]: ОШИБКА: недостаточно памяти
Есть ли более оптимальный способ запустить это обновление? Даже если мне нужно выполнить пакетную обработку по LIMIT / OFFSET или сохранить результаты SELECT в таблице, а затем выполнить ОБНОВЛЕНИЕ непосредственно из этой таблицы - какой способ запустить это обновление без ошибок памяти?
Спасибо всем большое!