-- -- MULTI_ALIAS -- -- Here we test using various types of aliases for a distributed table -- Test file is created when fixing #4269 column alias bug -- CREATE SCHEMA alias; SET search_path TO alias; SET citus.shard_count TO 1; SET citus.shard_replication_factor TO 1; SET citus.next_shard_id TO 90630800; CREATE TABLE alias_test(a int, b int); SELECT create_distributed_table('alias_test', 'a'); create_distributed_table --------------------------------------------------------------------- (1 row) INSERT INTO alias_test VALUES (0, 0), (1, 1); SET citus.log_remote_commands TO on; SELECT * FROM alias_test; NOTICE: issuing SELECT a, b FROM alias.alias_test_90630800 alias_test DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b --------------------------------------------------------------------- 0 | 0 1 | 1 (2 rows) SELECT * FROM alias_test AS alias_test; NOTICE: issuing SELECT a, b FROM alias.alias_test_90630800 alias_test DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b --------------------------------------------------------------------- 0 | 0 1 | 1 (2 rows) SELECT * FROM alias_test AS another_name; NOTICE: issuing SELECT a, b FROM alias.alias_test_90630800 another_name DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b --------------------------------------------------------------------- 0 | 0 1 | 1 (2 rows) SELECT * FROM alias_test AS alias_test(col1, col2); NOTICE: issuing SELECT col1, col2 FROM alias.alias_test_90630800 alias_test(col1, col2) DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx col1 | col2 --------------------------------------------------------------------- 0 | 0 1 | 1 (2 rows) SELECT * FROM alias_test AS another_name(col1, col2); NOTICE: issuing SELECT col1, col2 FROM alias.alias_test_90630800 another_name(col1, col2) DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx col1 | col2 --------------------------------------------------------------------- 0 | 0 1 | 1 (2 rows) RESET citus.log_remote_commands; -- test everything on https://github.com/citusdata/citus/issues/4269 CREATE TABLE test (x int, y int, z int); INSERT INTO test VALUES (0, 1, 2), (3, 4, 5), (6, 7, 8); -- on PG works fine SELECT * FROM test AS t1 (a, b, c) ORDER BY 1; a | b | c --------------------------------------------------------------------- 0 | 1 | 2 3 | 4 | 5 6 | 7 | 8 (3 rows) SELECT * FROM test AS t1 (a, b, c) WHERE a = 6 ORDER BY 2; a | b | c --------------------------------------------------------------------- 6 | 7 | 8 (1 row) CREATE TABLE test_2 (x int, y int); INSERT INTO test_2 VALUES (0, 10), (3, 30); -- on PG works fine SELECT * FROM test t1 (a, b, c) JOIN test_2 t2 (a, d) USING (a) ORDER BY a, d; a | b | c | d --------------------------------------------------------------------- 0 | 1 | 2 | 10 3 | 4 | 5 | 30 (2 rows) -- same queries on Citus now also work! SELECT create_distributed_table('test', 'x'); NOTICE: Copying data from local table... NOTICE: copying the data has completed DETAIL: The local data in the table is no longer visible, but is still on disk. HINT: To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$alias.test$$) create_distributed_table --------------------------------------------------------------------- (1 row) SELECT create_distributed_table('test_2', 'x'); NOTICE: Copying data from local table... NOTICE: copying the data has completed DETAIL: The local data in the table is no longer visible, but is still on disk. HINT: To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$alias.test_2$$) create_distributed_table --------------------------------------------------------------------- (1 row) SET citus.log_remote_commands TO on; SELECT * FROM test AS t1 (a, b, c) ORDER BY 1; NOTICE: issuing SELECT a, b, c FROM alias.test_90630801 t1(a, b, c) ORDER BY a DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b | c --------------------------------------------------------------------- 0 | 1 | 2 3 | 4 | 5 6 | 7 | 8 (3 rows) SELECT * FROM test t1 (a, b, c) JOIN test_2 t2 (a, d) USING (a) ORDER BY a, d; NOTICE: issuing SELECT t1.a, t1.b, t1.c, t2.d FROM (alias.test_90630801 t1(a, b, c) JOIN alias.test_2_90630802 t2(a, d) USING (a)) ORDER BY t1.a, t2.d DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b | c | d --------------------------------------------------------------------- 0 | 1 | 2 | 10 3 | 4 | 5 | 30 (2 rows) SELECT * FROM test AS t1 (a, b, c) WHERE a = 6 ORDER BY 2; NOTICE: issuing SELECT a, b, c FROM alias.test_90630801 t1(a, b, c) WHERE (a OPERATOR(pg_catalog.=) 6) ORDER BY b DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b | c --------------------------------------------------------------------- 6 | 7 | 8 (1 row) SET citus.enable_fast_path_router_planner TO off; SELECT * FROM test AS t1 (a, b, c) WHERE a = 6 ORDER BY 2; NOTICE: issuing SELECT a, b, c FROM alias.test_90630801 t1(a, b, c) WHERE (a OPERATOR(pg_catalog.=) 6) ORDER BY b DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b | c --------------------------------------------------------------------- 6 | 7 | 8 (1 row) RESET citus.enable_fast_path_router_planner; -- outer JOINs go through pushdown planner SELECT * FROM test t1 (a, b, c) LEFT JOIN test_2 t2 (a, d) USING (a) ORDER BY a, d; NOTICE: issuing SELECT t1.a, t1.b, t1.c, t2.d FROM (alias.test_90630801 t1(a, b, c) LEFT JOIN alias.test_2_90630802 t2(a, d) USING (a)) ORDER BY t1.a, t2.d DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx a | b | c | d --------------------------------------------------------------------- 0 | 1 | 2 | 10 3 | 4 | 5 | 30 6 | 7 | 8 | (3 rows) RESET citus.log_remote_commands; DROP SCHEMA alias CASCADE; NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table alias_test drop cascades to table test drop cascades to table test_2