drop table if exists tab; create unlogged table tab (a int4, b int4, f3 int, f4 int, f5 text, f6 float8) partition by range(a); do $$ begin for i in 0..9 loop execute 'create unlogged table tab'||i||' partition of tab for values from ('||i*1000000||') to ('||(i+1)*1000000||');'; end loop; end$$; \timing on insert into tab select g, g, g, g, g::text, g from generate_series(1, 10000000-1) g; vacuum tab; explain verbose update tab set b = b, f6 = f6; update tab set b = b, f6 = f6;