mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-04 12:36:50 +02:00
11d8d72c27
Not much to say about this; does what it says on the tin. However, formerly, if there was a column list then the ANALYZE action was implied; now it must be specified, or you get an error. This is because it would otherwise be a bit unclear what the user meant if some tables have column lists and some don't. Nathan Bossart, reviewed by Michael Paquier and Masahiko Sawada, with some editorialization by me Discussion: https://postgr.es/m/E061A8E3-5E3D-494D-94F0-E8A9B312BBFC@amazon.com
95 lines
2.9 KiB
SQL
95 lines
2.9 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);
|
|
|
|
DROP TABLE vaccluster;
|
|
DROP TABLE vactst;
|
|
DROP TABLE vacparted;
|