PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden von Fensterfunktionen in einer Update-Anweisung

Der Fehler kommt von Postgres, nicht von Django. Sie können dies umschreiben als:

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;  

Oder alternativ:

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;

Das funktioniert. Habe es gerade auf postgres-9.6 getestet. Hier ist die Syntax für UPDATE (siehe optionale fromlist ).

Hoffe das hilft.