MacBook PRO M3 36GB 
——————————————————————————

huge_new=# set temp_file_compression = "no";
SET
huge_new=# SELECT datname, temp_bytes                                                                                                                                                                                                                       FROM pg_stat_database;
    datname    |  temp_bytes  
---------------+--------------
               |            0
 postgres      |    154000000
 fjanus        |            0
 template1     |            0
 template0     |            0
 hashjoin_test |            0
 huge_tables   | 157592582113
 random        |    890168658
 eshop         |     56335229
 huge_new      |            0
(10 rows)

huge_new=#  EXPLAIN ANALYZE SELECT a.id, a.data, b.data FROM table_a a JOIN table_b b ON a.id = b.id;                                                                                                                                                                                                                         QUERY PLAN                                                                   
-----------------------------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1318666.18..4309880.44 rows=10000008 width=816) (actual time=113489.050..168871.466 rows=10000000 loops=1)
   Workers Planned: 7
   Workers Launched: 7
   ->  Hash Join  (cost=1317666.18..3308879.64 rows=1428573 width=816) (actual time=113528.579..161470.256 rows=1250000 loops=8)
         Hash Cond: (b.id = a.id)
         ->  Parallel Seq Scan on table_b b  (cost=0.00..1139683.45 rows=2857145 width=412) (actual time=0.638..9547.653 rows=2500000 loops=8)
         ->  Hash  (cost=655556.08..655556.08 rows=10000008 width=412) (actual time=113206.367..113206.367 rows=10000000 loops=8)
               Buckets: 32768  Batches: 1024  Memory Usage: 4486kB
               ->  Seq Scan on table_a a  (cost=0.00..655556.08 rows=10000008 width=412) (actual time=0.524..9326.244 rows=10000000 loops=8)
 Planning Time: 1.720 ms
 Execution Time: 169180.107 ms
(11 rows)

huge_new=# SELECT datname, temp_bytes / 1024 / 1024 AS temp_bytes_mb FROM pg_stat_database;
    datname    | temp_bytes_mb 
---------------+---------------
               |             0
 postgres      |           146
 fjanus        |             0
 template1     |             0
 template0     |             0
 hashjoin_test |             0
 huge_tables   |        150291
 random        |           848
 eshop         |            53
 huge_new      |         41234
(10 rows)

huge_new=# set temp_file_compression = "lz4";
SET
huge_new=# SELECT pg_stat_reset();
 pg_stat_reset 
---------------
 
(1 row)

huge_new=#  EXPLAIN ANALYZE SELECT a.id, a.data, b.data FROM table_a a JOIN table_b b ON a.id = b.id;                                                                                                                                                                                                                         QUERY PLAN                                                                   
-----------------------------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1318666.18..4309880.44 rows=10000008 width=816) (actual time=93632.254..128635.086 rows=10000000 loops=1)
   Workers Planned: 7
   Workers Launched: 7
   ->  Hash Join  (cost=1317666.18..3308879.64 rows=1428573 width=816) (actual time=93657.750..123759.947 rows=1250000 loops=8)
         Hash Cond: (b.id = a.id)
         ->  Parallel Seq Scan on table_b b  (cost=0.00..1139683.45 rows=2857145 width=412) (actual time=0.478..5278.765 rows=2500000 loops=8)
         ->  Hash  (cost=655556.08..655556.08 rows=10000008 width=412) (actual time=93328.973..93328.973 rows=10000000 loops=8)
               Buckets: 32768  Batches: 1024  Memory Usage: 4486kB
               ->  Seq Scan on table_a a  (cost=0.00..655556.08 rows=10000008 width=412) (actual time=0.957..6605.046 rows=10000000 loops=8)
 Planning Time: 0.807 ms
 Execution Time: 128980.688 ms
(11 rows)

huge_new=# SELECT datname, temp_bytes / 1024 / 1024 AS temp_bytes_mb FROM pg_stat_database;
    datname    | temp_bytes_mb 
---------------+---------------
               |             0
 postgres      |           146
 fjanus        |             0
 template1     |             0
 template0     |             0
 hashjoin_test |             0
 huge_tables   |        150291
 random        |           848
 eshop         |            53
 huge_new      |          1937
(10 rows)

huge_new=# SELECT pg_size_pretty(pg_database_size('huge_new'));
 pg_size_pretty 
----------------
 13 GB
(1 row)

Virtual machine ARM64 10GB/ 6CPU
———————————————————————————————————

huge=# SELECT datname,
       temp_bytes / 1024 / 1024 AS temp_bytes_mb
FROM pg_stat_database;
     datname      | temp_bytes_mb 
------------------+---------------
                  |             0
 postgres         |             0
 template1        |             0
 template0        |             0
 huge             |             0
(11 rows)

huge=# set temp_file_compression = "lz4";
SET
huge=# EXPLAIN ANALYZE SELECT a.id, a.data, b.data FROM table_a a JOIN table_b b ON a.id = b.id;
                                                                  QUERY PLAN                                                                   
-----------------------------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1318666.18..4967281.40 rows=10000008 width=816) (actual time=16515.365..35155.453 rows=10000000 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   ->  Hash Join  (cost=1317666.18..3966280.60 rows=4166670 width=816) (actual time=16497.442..31216.586 rows=3333333 loops=3)
         Hash Cond: (b.id = a.id)
         ->  Parallel Seq Scan on table_b b  (cost=0.00..1194445.40 rows=8333340 width=412) (actual time=0.873..3916.384 rows=6666667 loops=3)
         ->  Hash  (cost=655556.08..655556.08 rows=10000008 width=412) (actual time=16479.002..16479.003 rows=10000000 loops=3)
               Buckets: 32768  Batches: 1024  Memory Usage: 4486kB
               ->  Seq Scan on table_a a  (cost=0.00..655556.08 rows=10000008 width=412) (actual time=0.356..9466.043 rows=10000000 loops=3)
 Planning Time: 0.814 ms
 Execution Time: 35431.791 ms
(11 rows)

huge=# SELECT datname,
       temp_bytes / 1024 / 1024 AS temp_bytes_mb
FROM pg_stat_database;
     datname      | temp_bytes_mb 
------------------+---------------
                  |             0
 postgres         |             0
 template1        |             0
 template0        |             0
 fjanus           |             0
 test             |             0
 d22              |             0
 hashjoin_test    |            16
 compression_test |           196
 cmptest          |             1
 huge             |           921
(11 rows)

huge=# set temp_file_compression = "no";
SET
huge=# SELECT pg_stat_reset();
 pg_stat_reset 
---------------
 
(1 row)

huge=# EXPLAIN ANALYZE SELECT a.id, a.data, b.data FROM table_a a JOIN table_b b ON a.id = b.id;
                                                                   QUERY PLAN                                                                   
------------------------------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1318666.18..4967281.40 rows=10000008 width=816) (actual time=23555.046..69838.589 rows=10000000 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   ->  Hash Join  (cost=1317666.18..3966280.60 rows=4166670 width=816) (actual time=23542.253..59981.044 rows=3333333 loops=3)
         Hash Cond: (b.id = a.id)
         ->  Parallel Seq Scan on table_b b  (cost=0.00..1194445.40 rows=8333340 width=412) (actual time=0.397..13283.039 rows=6666667 loops=3)
         ->  Hash  (cost=655556.08..655556.08 rows=10000008 width=412) (actual time=23520.499..23520.500 rows=10000000 loops=3)
               Buckets: 32768  Batches: 1024  Memory Usage: 4486kB
               ->  Seq Scan on table_a a  (cost=0.00..655556.08 rows=10000008 width=412) (actual time=0.378..15375.891 rows=10000000 loops=3)
 Planning Time: 1.231 ms
 Execution Time: 70140.003 ms
(11 rows)

huge=# SELECT datname,
       temp_bytes / 1024 / 1024 AS temp_bytes_mb
FROM pg_stat_database;
     datname      | temp_bytes_mb 
------------------+---------------
                  |             0
 postgres         |             0
 template1        |             0
 template0        |             0
 fjanus           |             0
 test             |             0
 d22              |             0
 hashjoin_test    |            16
 compression_test |           196
 cmptest          |             1
 huge             |         20655
(11 rows)

huge=# SELECT pg_size_pretty(pg_database_size('huge'));
 pg_size_pretty 
----------------
 13 GB
(1 row)