postgres bulk uptate batch - ghdrako/doc_snipets GitHub Wiki
https://medium.com/@siddarthpatil/strategies-for-efficiently-updating-millions-of-records-in-postgresql-46afe980cf6b https://stackoverflow.com/questions/67091815/how-to-update-a-single-column-in-postgres-in-a-batch-for-55-million-records
Using ctid
DO $$ 
DECLARE
    ctid_min TEXT;
    ctid_max TEXT;
    batch_size INTEGER := 1000; -- Rozmiar partii (ilość wierszy na raz)
BEGIN
    LOOP
        -- Pobierz minimalny i maksymalny ctid dla danej partii
        SELECT min(ctid), max(ctid) 
        INTO ctid_min, ctid_max
        FROM (SELECT ctid FROM example_table ORDER BY ctid LIMIT batch_size) AS subquery;
        -- Jeśli brak więcej rekordów, zakończ pętlę
        EXIT WHEN ctid_min IS NULL;
        -- Wykonaj aktualizację dla bieżącej partii
        UPDATE example_table
        SET column_name = new_value
        WHERE ctid >= ctid_min AND ctid <= ctid_max;
        -- Usuń już zaktualizowane rekordy z kolejki
        DELETE FROM example_table WHERE ctid >= ctid_min AND ctid <= ctid_max;
    END LOOP;
END $$;