mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-16 03:17:00 +08:00
When a user does not have ownership on a relation, then specific log messages are generated. This new test suite adds coverage for all the possible log messages generated, which will be useful to check the consistency of any refactoring related to ownership checks for relations vacuumed or analyzed. Author: Michael Paquier Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/20180812222142.GA6097@paquier.xyz
119 lines
3.5 KiB
SQL
119 lines
3.5 KiB
SQL
--
|
|
-- VACUUM
|
|
--
|
|
|
|
CREATE TABLE vactst (i INT);
|
|
INSERT INTO vactst VALUES (1);
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst VALUES (0);
|
|
SELECT count(*) FROM vactst;
|
|
DELETE FROM vactst WHERE i != 0;
|
|
SELECT * FROM vactst;
|
|
VACUUM FULL vactst;
|
|
UPDATE vactst SET i = i + 1;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst SELECT * FROM vactst;
|
|
INSERT INTO vactst VALUES (0);
|
|
SELECT count(*) FROM vactst;
|
|
DELETE FROM vactst WHERE i != 0;
|
|
VACUUM (FULL) vactst;
|
|
DELETE FROM vactst;
|
|
SELECT * FROM vactst;
|
|
|
|
VACUUM (FULL, FREEZE) vactst;
|
|
VACUUM (ANALYZE, FULL) vactst;
|
|
|
|
CREATE TABLE vaccluster (i INT PRIMARY KEY);
|
|
ALTER TABLE vaccluster CLUSTER ON vaccluster_pkey;
|
|
CLUSTER vaccluster;
|
|
|
|
CREATE FUNCTION do_analyze() RETURNS VOID VOLATILE LANGUAGE SQL
|
|
AS 'ANALYZE pg_am';
|
|
CREATE FUNCTION wrap_do_analyze(c INT) RETURNS INT IMMUTABLE LANGUAGE SQL
|
|
AS 'SELECT $1 FROM do_analyze()';
|
|
CREATE INDEX ON vaccluster(wrap_do_analyze(i));
|
|
INSERT INTO vaccluster VALUES (1), (2);
|
|
ANALYZE vaccluster;
|
|
|
|
VACUUM FULL pg_am;
|
|
VACUUM FULL pg_class;
|
|
VACUUM FULL pg_database;
|
|
VACUUM FULL vaccluster;
|
|
VACUUM FULL vactst;
|
|
|
|
VACUUM (DISABLE_PAGE_SKIPPING) vaccluster;
|
|
|
|
-- partitioned table
|
|
CREATE TABLE vacparted (a int, b char) PARTITION BY LIST (a);
|
|
CREATE TABLE vacparted1 PARTITION OF vacparted FOR VALUES IN (1);
|
|
INSERT INTO vacparted VALUES (1, 'a');
|
|
UPDATE vacparted SET b = 'b';
|
|
VACUUM (ANALYZE) vacparted;
|
|
VACUUM (FULL) vacparted;
|
|
VACUUM (FREEZE) vacparted;
|
|
|
|
-- check behavior with duplicate column mentions
|
|
VACUUM ANALYZE vacparted(a,b,a);
|
|
ANALYZE vacparted(a,b,b);
|
|
|
|
-- multiple tables specified
|
|
VACUUM vaccluster, vactst;
|
|
VACUUM vacparted, does_not_exist;
|
|
VACUUM (FREEZE) vacparted, vaccluster, vactst;
|
|
VACUUM (FREEZE) does_not_exist, vaccluster;
|
|
VACUUM ANALYZE vactst, vacparted (a);
|
|
VACUUM ANALYZE vactst (does_not_exist), vacparted (b);
|
|
VACUUM FULL vacparted, vactst;
|
|
VACUUM FULL vactst, vacparted (a, b), vaccluster (i);
|
|
ANALYZE vactst, vacparted;
|
|
ANALYZE vacparted (b), vactst;
|
|
ANALYZE vactst, does_not_exist, vacparted;
|
|
ANALYZE vactst (i), vacparted (does_not_exist);
|
|
|
|
-- parenthesized syntax for ANALYZE
|
|
ANALYZE (VERBOSE) does_not_exist;
|
|
ANALYZE (nonexistant-arg) does_not_exist;
|
|
|
|
DROP TABLE vaccluster;
|
|
DROP TABLE vactst;
|
|
DROP TABLE vacparted;
|
|
|
|
-- relation ownership, WARNING logs generated as all are skipped.
|
|
CREATE TABLE vacowned (a int);
|
|
CREATE ROLE regress_vacuum;
|
|
SET ROLE regress_vacuum;
|
|
-- Simple table
|
|
VACUUM vacowned;
|
|
ANALYZE vacowned;
|
|
VACUUM (ANALYZE) vacowned;
|
|
-- Catalog
|
|
VACUUM pg_catalog.pg_class;
|
|
ANALYZE pg_catalog.pg_class;
|
|
VACUUM (ANALYZE) pg_catalog.pg_class;
|
|
-- Shared catalog
|
|
VACUUM pg_catalog.pg_authid;
|
|
ANALYZE pg_catalog.pg_authid;
|
|
VACUUM (ANALYZE) pg_catalog.pg_authid;
|
|
RESET ROLE;
|
|
DROP TABLE vacowned;
|
|
DROP ROLE regress_vacuum;
|