Ajuste del rendimiento de Postgresql y el uso de memoria en un flujo de trabajo de Python

Yo uso Postgresql 9.4 para una base de datos modelo. Mi mesa se ve algo así:

CREATE TABLE table1 (
sid INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('table1_sid_seq'::regclass),
col1 INT, 
col2 INT,
col3 JSONB);

Mi flujo de trabajo de Python 2.7 a menudo se ve así:

curs.execute("SELECT sid, col1, col2 FROM table1")
data = curs.fetchall()
putback = []
for i in data: 
    result = do_something(i[1], i[2])
    putback.append((sid, result))
del data
curs.execute("UPDATE table1
              SET col3 = p.result
              FROM unnest(%s) p(sid INT, result JSONB)
              WHERE sid = p.sid", (putback,))

Esto generalmente funciona bastante bien y de manera eficiente. Sin embargo, para consultas grandes, el uso de la memoria Postgresql a veces irá por las nubes (> 50 GB) durante elUPDATE OS X y creo que OS X lo está matando, porque obtengo elWARNING: terminating connection because of crash of another server process. Mi Macbook Pro tiene 16 GB de RAM y la consulta en cuestión tiene 11 millones de líneas con cada una de aproximadamente 100 caracteres de datos para reescribir.

Mipostgresql.conf:

default_statistics_target = 50
maintenance_work_mem = 512MB 
constraint_exclusion = on 
checkpoint_completion_target = 0.9
effective_cache_size = 4GB 
work_mem = 256MB 
wal_buffers = 16MB 
checkpoint_segments = 128 
shared_buffers = 1024MB 
max_connections = 80

Entonces me pregunto

¿Por qué mi consulta consume a veces cantidades excesivas de RAM?¿Cómo puedo controlar el uso de la memoria y garantizar un buen rendimiento?¿Existe una buena guía o herramienta para ajustar Postgresql?

Actualizar:
Estoy bastante seguro de que @wildplasser identificó mi problema. En los comentarios, sugiere volcar primero los datos en la base de datos y desempaquetarlos desde allí. Lamentablemente, no pude descubrir cómo implementar su propuesta.Si alguien tiene una idea de cómo hacerlo, su respuesta será aceptada con mucho gusto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta