Моето заобиколно решение е да нарязвате putback
с проста функция, както е предложено тук
:
def chunk(l, n):
n = max(1, n)
return [l[i:i + n] for i in range(0, len(l), n)]
и след това
for chunk in chunk(putback, 250000):
curs.execute("UPDATE table1
SET col3 = p.result
FROM unnest(%s) p(sid INT, result JSONB)
WHERE sid = p.sid", (chunk,))
Това работи, т.е. поддържа отпечатъка на паметта под контрол, но не е много елегантно и е по-бавно от изхвърлянето на всички данни наведнъж, както обикновено правя.