PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando funções de janela em uma instrução de atualização


O erro é do postgres e não do django. Você pode reescrever isso como:
WITH v_table_name AS
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) 
UPDATE table_name set table_name.col1 = v_table_name.rn
FROM v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;  

Ou alternativamente:
UPDATE table_name set table_name.col1 = v_table_name.rn
FROM  
(
    SELECT row_number() over (partition by col2 order by col3) AS rn, primary_key
    FROM table_name
) AS v_table_name
WHERE table_name.primary_key = v_table_name.primary_key;

Isso funciona. Acabei de testar no postgres-9.6. Aqui está a sintaxe para UPDATE (veja o opcional fromlist ).

Espero que isto ajude.