¿Cómo ACTUALIZAR eficientemente una columna en una tabla PostgreSQL grande usando Python / psycopg2?

Tengo una mesa grande con ca. 10 millones de filas en la base de datos PostgreSQL 9.4. Se ve algo así:

gid | number1 | random | result | ...
 1  |    2    |  NULL  |  NULL  | ...
 2  |   15    |  NULL  |  NULL  | ...
... |   ...   |   ...  |  ...   | ...

Ahora me gustaría actualizar las columnasrandom yresult como una función denumber1. Eso significa que al menosrandom necesita ser producido en un script fuera de la base de datos. Como tengo RAM limitada, me pregunto cómo podría hacerlo de manera eficiente usandopsycopg2. Creo que me enfrento a dos problemas: cómo recuperar los datos sin usar demasiada RAM y cómo recuperarlos allí. El enfoque simple se vería así:

curs.execute("""SELECT gid1, number1 FROM my_table;""")
data = curs.fetchall()

result = []
for i in data:
    result.append((create_random(i[1]), i[0]))
curs.executemany("""UPDATE my_table
                    SET random = %s
                    WHERE gid = %s;""",
                 results)
curs.execute("""UPDATE my_table
                SET result = number1 * random;""")

Sin embargo, esto ciertamente agotará rápidamente toda mi memoria y tomará una eternidadUPDATE my_table.

¿Cuál sería una estrategia más inteligente? Se accede a la base de datos exclusivamente y se puede bloquear. La función aleatoria de PostgreSQL desafortunadamente no es adecuada para mi caso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta