OK.
In your case, I can not see any reasons that
using a temp table to do joint-update is faster than directly updating.
And from the execution plan, index scan just takes very little time.
Most of the time is doing insert/delete.
As you mentioned, fk_assignmentwhere is updated frequently,
and disabling indexes before updating is not an option you can choose,
try setting fillfactor of this table to a smaller value.
And maybe you can also check the time of inserting 8920 rows to this table.
If it is far less than 35s.
you can consider to do update in this way:
1.create a temp table with all columns of fk_assignmentwhere,
likes
create unlogged table "temp_table" as
select id, ..... , 1000 as fk_job
from "TRANSLATION"
where fk_job = 1000;
2.delete rows from original table.
3.inert rows from temp table to original table.
At the end , may be you can check if postgresql can insert start from the position of HWM(High Water Mark).