@ -3451,6 +3451,41 @@ SELECT statistics_name, most_common_vals FROM pg_stats_ext_exprs x
s_expr | {1}
s_expr | {1}
(2 rows)
(2 rows)
-- CREATE STATISTICS checks for CREATE on the schema
RESET SESSION AUTHORIZATION;
CREATE SCHEMA sts_sch1 CREATE TABLE sts_sch1.tbl (a INT, b INT, c INT GENERATED ALWAYS AS (b * 2) STORED);
CREATE SCHEMA sts_sch2;
GRANT USAGE ON SCHEMA sts_sch1, sts_sch2 TO regress_stats_user1;
ALTER TABLE sts_sch1.tbl OWNER TO regress_stats_user1;
SET SESSION AUTHORIZATION regress_stats_user1;
CREATE STATISTICS ON a, b, c FROM sts_sch1.tbl;
ERROR: permission denied for schema sts_sch1
CREATE STATISTICS sts_sch2.fail ON a, b, c FROM sts_sch1.tbl;
ERROR: permission denied for schema sts_sch2
RESET SESSION AUTHORIZATION;
GRANT CREATE ON SCHEMA sts_sch1 TO regress_stats_user1;
SET SESSION AUTHORIZATION regress_stats_user1;
CREATE STATISTICS ON a, b, c FROM sts_sch1.tbl;
CREATE STATISTICS sts_sch2.fail ON a, b, c FROM sts_sch1.tbl;
ERROR: permission denied for schema sts_sch2
RESET SESSION AUTHORIZATION;
REVOKE CREATE ON SCHEMA sts_sch1 FROM regress_stats_user1;
GRANT CREATE ON SCHEMA sts_sch2 TO regress_stats_user1;
SET SESSION AUTHORIZATION regress_stats_user1;
CREATE STATISTICS ON a, b, c FROM sts_sch1.tbl;
ERROR: permission denied for schema sts_sch1
CREATE STATISTICS sts_sch2.pass1 ON a, b, c FROM sts_sch1.tbl;
RESET SESSION AUTHORIZATION;
GRANT CREATE ON SCHEMA sts_sch1, sts_sch2 TO regress_stats_user1;
SET SESSION AUTHORIZATION regress_stats_user1;
CREATE STATISTICS ON a, b, c FROM sts_sch1.tbl;
CREATE STATISTICS sts_sch2.pass2 ON a, b, c FROM sts_sch1.tbl;
-- re-creating statistics via ALTER TABLE bypasses checks for CREATE on schema
RESET SESSION AUTHORIZATION;
REVOKE CREATE ON SCHEMA sts_sch1, sts_sch2 FROM regress_stats_user1;
SET SESSION AUTHORIZATION regress_stats_user1;
ALTER TABLE sts_sch1.tbl ALTER COLUMN a TYPE SMALLINT;
ALTER TABLE sts_sch1.tbl ALTER COLUMN c SET EXPRESSION AS (a * 3);
-- Tidy up
-- Tidy up
DROP OPERATOR <<< (int, int);
DROP OPERATOR <<< (int, int);
DROP FUNCTION op_leak(int, int);
DROP FUNCTION op_leak(int, int);
@ -3463,6 +3498,8 @@ NOTICE: drop cascades to 3 other objects
DETAIL: drop cascades to table tststats.priv_test_parent_tbl
DETAIL: drop cascades to table tststats.priv_test_parent_tbl
drop cascades to table tststats.priv_test_tbl
drop cascades to table tststats.priv_test_tbl
drop cascades to view tststats.priv_test_view
drop cascades to view tststats.priv_test_view
DROP SCHEMA sts_sch1, sts_sch2 CASCADE;
NOTICE: drop cascades to table sts_sch1.tbl
DROP USER regress_stats_user1;
DROP USER regress_stats_user1;
CREATE TABLE grouping_unique (x integer);
CREATE TABLE grouping_unique (x integer);
INSERT INTO grouping_unique (x) SELECT gs FROM generate_series(1,1000) AS gs;
INSERT INTO grouping_unique (x) SELECT gs FROM generate_series(1,1000) AS gs;