2002-07-20 06:58:14 +02:00
|
|
|
--
|
|
|
|
-- 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;
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2049
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
DELETE FROM vactst WHERE i != 0;
|
|
|
|
SELECT * FROM vactst;
|
|
|
|
i
|
|
|
|
---
|
|
|
|
0
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
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;
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2049
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
DELETE FROM vactst WHERE i != 0;
|
2009-11-16 22:32:07 +01:00
|
|
|
VACUUM (FULL) vactst;
|
2002-07-20 06:58:14 +02:00
|
|
|
DELETE FROM vactst;
|
|
|
|
SELECT * FROM vactst;
|
|
|
|
i
|
|
|
|
---
|
|
|
|
(0 rows)
|
|
|
|
|
2009-11-16 22:32:07 +01:00
|
|
|
VACUUM (FULL, FREEZE) vactst;
|
2010-02-08 05:33:55 +01:00
|
|
|
VACUUM (ANALYZE, FULL) vactst;
|
2010-01-06 06:31:14 +01:00
|
|
|
CREATE TABLE vaccluster (i INT PRIMARY KEY);
|
|
|
|
ALTER TABLE vaccluster CLUSTER ON vaccluster_pkey;
|
|
|
|
CLUSTER vaccluster;
|
2015-01-08 04:33:58 +01:00
|
|
|
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()';
|
2015-01-12 21:13:28 +01:00
|
|
|
CREATE INDEX ON vaccluster(wrap_do_analyze(i));
|
|
|
|
INSERT INTO vaccluster VALUES (1), (2);
|
|
|
|
ANALYZE vaccluster;
|
2015-01-08 04:33:58 +01:00
|
|
|
ERROR: ANALYZE cannot be executed from VACUUM or ANALYZE
|
|
|
|
CONTEXT: SQL function "do_analyze" statement 1
|
|
|
|
SQL function "wrap_do_analyze" statement 1
|
2010-01-06 06:31:14 +01:00
|
|
|
VACUUM FULL pg_am;
|
|
|
|
VACUUM FULL pg_class;
|
|
|
|
VACUUM FULL pg_database;
|
|
|
|
VACUUM FULL vaccluster;
|
2015-01-08 04:33:58 +01:00
|
|
|
ERROR: ANALYZE cannot be executed from VACUUM or ANALYZE
|
|
|
|
CONTEXT: SQL function "do_analyze" statement 1
|
|
|
|
SQL function "wrap_do_analyze" statement 1
|
2015-01-12 21:13:28 +01:00
|
|
|
VACUUM FULL vactst;
|
2016-06-17 21:48:57 +02:00
|
|
|
VACUUM (DISABLE_PAGE_SKIPPING) vaccluster;
|
2017-03-07 17:24:51 +01:00
|
|
|
-- 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;
|
2017-09-22 00:13:11 +02:00
|
|
|
-- check behavior with duplicate column mentions
|
|
|
|
VACUUM ANALYZE vacparted(a,b,a);
|
2017-09-26 21:25:56 +02:00
|
|
|
ERROR: column "a" of relation "vacparted" appears more than once
|
2017-09-22 00:13:11 +02:00
|
|
|
ANALYZE vacparted(a,b,b);
|
2017-09-26 21:25:56 +02:00
|
|
|
ERROR: column "b" of relation "vacparted" appears more than once
|
2017-10-04 00:53:44 +02:00
|
|
|
-- multiple tables specified
|
|
|
|
VACUUM vaccluster, vactst;
|
|
|
|
VACUUM vacparted, does_not_exist;
|
|
|
|
ERROR: relation "does_not_exist" does not exist
|
|
|
|
VACUUM (FREEZE) vacparted, vaccluster, vactst;
|
|
|
|
VACUUM (FREEZE) does_not_exist, vaccluster;
|
|
|
|
ERROR: relation "does_not_exist" does not exist
|
|
|
|
VACUUM ANALYZE vactst, vacparted (a);
|
|
|
|
VACUUM ANALYZE vactst (does_not_exist), vacparted (b);
|
|
|
|
ERROR: column "does_not_exist" of relation "vactst" does not exist
|
|
|
|
VACUUM FULL vacparted, vactst;
|
|
|
|
VACUUM FULL vactst, vacparted (a, b), vaccluster (i);
|
|
|
|
ERROR: ANALYZE option must be specified when a column list is provided
|
|
|
|
ANALYZE vactst, vacparted;
|
|
|
|
ANALYZE vacparted (b), vactst;
|
|
|
|
ANALYZE vactst, does_not_exist, vacparted;
|
|
|
|
ERROR: relation "does_not_exist" does not exist
|
|
|
|
ANALYZE vactst (i), vacparted (does_not_exist);
|
|
|
|
ERROR: column "does_not_exist" of relation "vacparted" does not exist
|
2018-03-06 01:21:05 +01:00
|
|
|
-- parenthesized syntax for ANALYZE
|
|
|
|
ANALYZE (VERBOSE) does_not_exist;
|
|
|
|
ERROR: relation "does_not_exist" does not exist
|
|
|
|
ANALYZE (nonexistant-arg) does_not_exist;
|
|
|
|
ERROR: syntax error at or near "nonexistant"
|
|
|
|
LINE 1: ANALYZE (nonexistant-arg) does_not_exist;
|
|
|
|
^
|
2017-10-04 00:53:44 +02:00
|
|
|
DROP TABLE vaccluster;
|
|
|
|
DROP TABLE vactst;
|
2017-03-07 17:24:51 +01:00
|
|
|
DROP TABLE vacparted;
|
2018-08-22 02:41:37 +02:00
|
|
|
-- relation ownership, WARNING logs generated as all are skipped.
|
|
|
|
CREATE TABLE vacowned (a int);
|
2018-08-24 02:15:08 +02:00
|
|
|
CREATE TABLE vacowned_parted (a int) PARTITION BY LIST (a);
|
|
|
|
CREATE TABLE vacowned_part1 PARTITION OF vacowned_parted FOR VALUES IN (1);
|
|
|
|
CREATE TABLE vacowned_part2 PARTITION OF vacowned_parted FOR VALUES IN (2);
|
2018-08-22 02:41:37 +02:00
|
|
|
CREATE ROLE regress_vacuum;
|
|
|
|
SET ROLE regress_vacuum;
|
|
|
|
-- Simple table
|
|
|
|
VACUUM vacowned;
|
|
|
|
WARNING: skipping "vacowned" --- only table or database owner can vacuum it
|
|
|
|
ANALYZE vacowned;
|
|
|
|
WARNING: skipping "vacowned" --- only table or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) vacowned;
|
|
|
|
WARNING: skipping "vacowned" --- only table or database owner can vacuum it
|
|
|
|
-- Catalog
|
|
|
|
VACUUM pg_catalog.pg_class;
|
|
|
|
WARNING: skipping "pg_class" --- only superuser or database owner can vacuum it
|
|
|
|
ANALYZE pg_catalog.pg_class;
|
|
|
|
WARNING: skipping "pg_class" --- only superuser or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) pg_catalog.pg_class;
|
|
|
|
WARNING: skipping "pg_class" --- only superuser or database owner can vacuum it
|
|
|
|
-- Shared catalog
|
|
|
|
VACUUM pg_catalog.pg_authid;
|
|
|
|
WARNING: skipping "pg_authid" --- only superuser can vacuum it
|
|
|
|
ANALYZE pg_catalog.pg_authid;
|
|
|
|
WARNING: skipping "pg_authid" --- only superuser can analyze it
|
|
|
|
VACUUM (ANALYZE) pg_catalog.pg_authid;
|
|
|
|
WARNING: skipping "pg_authid" --- only superuser can vacuum it
|
2018-08-24 02:15:08 +02:00
|
|
|
-- Partitioned table and its partitions, nothing owned by other user.
|
|
|
|
-- Relations are not listed in a single command to test ownership
|
|
|
|
-- independently.
|
|
|
|
VACUUM vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
ANALYZE vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can analyze it
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can analyze it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
RESET ROLE;
|
|
|
|
-- Partitioned table and one partition owned by other user.
|
|
|
|
ALTER TABLE vacowned_parted OWNER TO regress_vacuum;
|
|
|
|
ALTER TABLE vacowned_part1 OWNER TO regress_vacuum;
|
|
|
|
SET ROLE regress_vacuum;
|
|
|
|
VACUUM vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part1;
|
|
|
|
VACUUM vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
ANALYZE vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part1;
|
|
|
|
ANALYZE vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part1;
|
|
|
|
VACUUM (ANALYZE) vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
RESET ROLE;
|
|
|
|
-- Only one partition owned by other user.
|
|
|
|
ALTER TABLE vacowned_parted OWNER TO CURRENT_USER;
|
|
|
|
SET ROLE regress_vacuum;
|
|
|
|
VACUUM vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part1;
|
|
|
|
VACUUM vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
ANALYZE vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can analyze it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part1;
|
|
|
|
ANALYZE vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_parted" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part1;
|
|
|
|
VACUUM (ANALYZE) vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
RESET ROLE;
|
|
|
|
-- Only partitioned table owned by other user.
|
|
|
|
ALTER TABLE vacowned_parted OWNER TO regress_vacuum;
|
|
|
|
ALTER TABLE vacowned_part1 OWNER TO CURRENT_USER;
|
|
|
|
SET ROLE regress_vacuum;
|
|
|
|
VACUUM vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
VACUUM vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
ANALYZE vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can analyze it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can analyze it
|
|
|
|
ANALYZE vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can analyze it
|
|
|
|
VACUUM (ANALYZE) vacowned_parted;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part1;
|
|
|
|
WARNING: skipping "vacowned_part1" --- only table or database owner can vacuum it
|
|
|
|
VACUUM (ANALYZE) vacowned_part2;
|
|
|
|
WARNING: skipping "vacowned_part2" --- only table or database owner can vacuum it
|
2018-08-22 02:41:37 +02:00
|
|
|
RESET ROLE;
|
|
|
|
DROP TABLE vacowned;
|
2018-08-24 02:15:08 +02:00
|
|
|
DROP TABLE vacowned_parted;
|
2018-08-22 02:41:37 +02:00
|
|
|
DROP ROLE regress_vacuum;
|