CREATE SCHEMA "statistics'Test"; SET search_path TO "statistics'Test"; SET citus.next_shard_id TO 980000; SET client_min_messages TO WARNING; SET citus.shard_count TO 32; SET citus.shard_replication_factor TO 1; -- test create statistics propagation CREATE TABLE test_stats ( a int, b int ); SELECT create_distributed_table('test_stats', 'a'); create_distributed_table --------------------------------------------------------------------- (1 row) CREATE STATISTICS pg_temp.s1 (dependencies) ON a, b FROM test_stats; ERROR: "statistics object s1" has dependency on unsupported object "schema pg_temp_xxx" CREATE STATISTICS s1 (dependencies) ON a, b FROM test_stats; -- test for distributing an already existing statistics CREATE TABLE "test'stats2" ( a int, b int ); CREATE STATISTICS s2 (dependencies) ON a, b FROM "test'stats2"; SELECT create_distributed_table('test''stats2', 'a'); create_distributed_table --------------------------------------------------------------------- (1 row) -- test when stats is on a different schema CREATE SCHEMA sc1; CREATE TABLE tbl (a int, "B" text); SELECT create_distributed_table ('tbl', 'a'); create_distributed_table --------------------------------------------------------------------- (1 row) CREATE STATISTICS sc1.st1 ON a, "B" FROM tbl; -- test distributing table with already created stats on a new schema CREATE TABLE test_stats3 ( a int, b int ); CREATE SCHEMA sc2; CREATE STATISTICS sc2."neW'Stat" ON a,b FROM test_stats3; SELECT create_distributed_table ('test_stats3','a'); create_distributed_table --------------------------------------------------------------------- (1 row) -- test dropping statistics CREATE TABLE test_stats4 ( a int, b int ); SELECT create_reference_table ('test_stats4'); create_reference_table --------------------------------------------------------------------- (1 row) CREATE STATISTICS s3 ON a,b FROM test_stats3; CREATE STATISTICS sc2.s4 ON a,b FROM test_stats3; CREATE STATISTICS s5 ON a,b FROM test_stats4; -- s6 doesn't exist DROP STATISTICS IF EXISTS s3, sc2.s4, s6; DROP STATISTICS s5,s6; ERROR: statistics object "s6" does not exist DROP STATISTICS IF EXISTS s5,s5,s6,s6; -- test renaming statistics CREATE STATISTICS s6 ON a,b FROM test_stats4; DROP STATISTICS s7; ERROR: statistics object "s7" does not exist ALTER STATISTICS s6 RENAME TO s7; ALTER STATISTICS sc1.st1 RENAME TO st1_new; -- test altering stats schema CREATE SCHEMA test_alter_schema; ALTER STATISTICS s7 SET SCHEMA test_alter_schema; -- test alter owner ALTER STATISTICS sc2."neW'Stat" OWNER TO pg_monitor; -- test alter owner before distribution CREATE TABLE ownertest(a int, b int); CREATE STATISTICS sc1.s9 ON a,b FROM ownertest; ALTER STATISTICS sc1.s9 OWNER TO pg_signal_backend; SELECT create_distributed_table('ownertest','a'); create_distributed_table --------------------------------------------------------------------- (1 row) -- test invalid column expressions CREATE TABLE test (x int, y int); SELECT create_distributed_table('test','x'); create_distributed_table --------------------------------------------------------------------- (1 row) CREATE STATISTICS stats_xy ON x,y FROM test; \c - - - :worker_1_port SELECT stxname FROM pg_statistic_ext WHERE stxnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2') ) AND stxname SIMILAR TO '%\_\d+' ORDER BY stxname ASC; stxname --------------------------------------------------------------------- neW'Stat_980096 neW'Stat_980098 neW'Stat_980100 neW'Stat_980102 neW'Stat_980104 neW'Stat_980106 neW'Stat_980108 neW'Stat_980110 neW'Stat_980112 neW'Stat_980114 neW'Stat_980116 neW'Stat_980118 neW'Stat_980120 neW'Stat_980122 neW'Stat_980124 neW'Stat_980126 s1_980000 s1_980002 s1_980004 s1_980006 s1_980008 s1_980010 s1_980012 s1_980014 s1_980016 s1_980018 s1_980020 s1_980022 s1_980024 s1_980026 s1_980028 s1_980030 s2_980032 s2_980034 s2_980036 s2_980038 s2_980040 s2_980042 s2_980044 s2_980046 s2_980048 s2_980050 s2_980052 s2_980054 s2_980056 s2_980058 s2_980060 s2_980062 s9_980129 s9_980131 s9_980133 s9_980135 s9_980137 s9_980139 s9_980141 s9_980143 s9_980145 s9_980147 s9_980149 s9_980151 s9_980153 s9_980155 s9_980157 s9_980159 st1_new_980064 st1_new_980066 st1_new_980068 st1_new_980070 st1_new_980072 st1_new_980074 st1_new_980076 st1_new_980078 st1_new_980080 st1_new_980082 st1_new_980084 st1_new_980086 st1_new_980088 st1_new_980090 st1_new_980092 st1_new_980094 stats_xy_980161 stats_xy_980163 stats_xy_980165 stats_xy_980167 stats_xy_980169 stats_xy_980171 stats_xy_980173 stats_xy_980175 stats_xy_980177 stats_xy_980179 stats_xy_980181 stats_xy_980183 stats_xy_980185 stats_xy_980187 stats_xy_980189 stats_xy_980191 (96 rows) SELECT count(DISTINCT stxnamespace) FROM pg_statistic_ext WHERE stxnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2') ) AND stxname SIMILAR TO '%\_\d+'; count --------------------------------------------------------------------- 3 (1 row) SELECT COUNT(DISTINCT stxowner) FROM pg_statistic_ext WHERE stxnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2') ) AND stxname SIMILAR TO '%\_\d+'; count --------------------------------------------------------------------- 3 (1 row) \c - - - :master_port SET client_min_messages TO WARNING; DROP SCHEMA "statistics'Test" CASCADE; DROP SCHEMA test_alter_schema CASCADE; DROP SCHEMA sc1 CASCADE; DROP SCHEMA sc2 CASCADE;