PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utilisation des fonctions de fenêtre dans une instruction de mise à jour

L'erreur vient de postgres et non de django. Vous pouvez réécrire ceci comme :

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 alternativement :

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;

Cela marche. Je viens de le tester sur postgres-9.6. Voici la syntaxe pour UPDATE (voir l'option fromlist ).

J'espère que cela vous aidera.