--- --- MULTI_EXPIRE_TABLE_CACHE --- ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 1220000; ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 1220000; -- create test table CREATE TABLE large_table(a int, b int); SELECT master_create_distributed_table('large_table', 'a', 'hash'); master_create_distributed_table --------------------------------- (1 row) SELECT master_create_worker_shards('large_table', 8, 1); master_create_worker_shards ----------------------------- (1 row) CREATE TABLE broadcast_table(a int, b int); SELECT master_create_distributed_table('broadcast_table', 'a', 'hash'); master_create_distributed_table --------------------------------- (1 row) SELECT master_create_worker_shards('broadcast_table', 2, 1); master_create_worker_shards ----------------------------- (1 row) -- verify only small tables are supported SELECT master_expire_table_cache('large_table'); ERROR: Must be called on tables smaller than 4 shards SELECT master_expire_table_cache('broadcast_table'); master_expire_table_cache --------------------------- (1 row) -- run a join so that broadcast tables are cached on other workers SELECT * from large_table l, broadcast_table b where l.a = b.b; a | b | a | b ---+---+---+--- (0 rows) -- insert some data INSERT INTO large_table VALUES(1, 1); INSERT INTO large_table VALUES(1, 2); INSERT INTO large_table VALUES(2, 1); INSERT INTO large_table VALUES(2, 2); INSERT INTO large_table VALUES(3, 1); INSERT INTO large_table VALUES(3, 2); INSERT INTO broadcast_table VALUES(1, 1); -- verify returned results are wrong SELECT * from large_table l, broadcast_table b WHERE l.b = b.b ORDER BY l.a, l.b; a | b | a | b ---+---+---+--- 1 | 1 | 1 | 1 2 | 1 | 1 | 1 (2 rows) -- expire cache and re-run, results should be correct this time SELECT master_expire_table_cache('broadcast_table'); master_expire_table_cache --------------------------- (1 row) SELECT * from large_table l, broadcast_table b WHERE l.b = b.b ORDER BY l.a, l.b; a | b | a | b ---+---+---+--- 1 | 1 | 1 | 1 2 | 1 | 1 | 1 3 | 1 | 1 | 1 (3 rows) -- insert some more data into broadcast table INSERT INTO broadcast_table VALUES(2, 2); -- run the same query, get wrong results SELECT * from large_table l, broadcast_table b WHERE l.b = b.b ORDER BY l.a, l.b; a | b | a | b ---+---+---+--- 1 | 1 | 1 | 1 2 | 1 | 1 | 1 3 | 1 | 1 | 1 3 | 2 | 2 | 2 (4 rows) -- expire cache and re-run, results should be correct this time SELECT master_expire_table_cache('broadcast_table'); master_expire_table_cache --------------------------- (1 row) SELECT * from large_table l, broadcast_table b WHERE l.b = b.b ORDER BY l.a, l.b; a | b | a | b ---+---+---+--- 1 | 1 | 1 | 1 1 | 2 | 2 | 2 2 | 1 | 1 | 1 2 | 2 | 2 | 2 3 | 1 | 1 | 1 3 | 2 | 2 | 2 (6 rows) DROP TABLE large_table, broadcast_table;