mirror of https://github.com/citusdata/citus.git
110 lines
2.8 KiB
Plaintext
110 lines
2.8 KiB
Plaintext
---
|
|
--- 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;
|