Como atualizar eficientemente uma coluna em uma grande tabela do PostgreSQL usando Python / psycopg2?

Eu tenho uma mesa grande com ca. 10 milhões de linhas no banco de dados PostgreSQL 9.4. Parece algo como isto:

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

Agora eu gostaria de atualizar as colunasrandom eresult como a função denumber1. Isso significa que pelo menosrandom precisa ser produzido em um script fora do banco de dados. Como tenho memória RAM limitada, pergunto-me como eu poderia fazer isso eficientemente usandopsycopg2. Acredito que enfrento dois problemas: como buscar os dados sem usar muita memória RAM e como recuperá-los. A abordagem simplória seria assim:

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;""")

No entanto, isso certamente esgotará rapidamente toda a minha memória e levará uma eternidade paraUPDATE my_table.

Qual seria uma estratégia mais inteligente? O banco de dados está sendo acessado exclusivamente e pode ser bloqueado. Infelizmente, a função aleatória do PostgreSQL não é adequada para o meu caso.

questionAnswers(1)

yourAnswerToTheQuestion