diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out index 458adee7f87..07271e1660e 100644 --- a/src/test/regress/expected/vacuum.out +++ b/src/test/regress/expected/vacuum.out @@ -277,10 +277,36 @@ BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; ANALYZE vactst; COMMIT; -- PROCESS_TOAST option -ALTER TABLE vactst ADD COLUMN t TEXT; -ALTER TABLE vactst ALTER COLUMN t SET STORAGE EXTERNAL; -VACUUM (PROCESS_TOAST FALSE) vactst; -VACUUM (PROCESS_TOAST FALSE, FULL) vactst; +CREATE TABLE vac_option_tab (a INT, t TEXT); +INSERT INTO vac_option_tab SELECT a, 't' || a FROM generate_series(1, 10) AS a; +ALTER TABLE vac_option_tab ALTER COLUMN t SET STORAGE EXTERNAL; +-- Check the number of vacuums done on table vac_option_tab and on its +-- toast relation, to check that PROCESS_TOAST works on what it should. +CREATE VIEW vac_option_tab_counts AS + SELECT CASE WHEN c.relname IS NULL + THEN 'main' ELSE 'toast' END as rel, + s.vacuum_count + FROM pg_stat_all_tables s + LEFT JOIN pg_class c ON s.relid = c.reltoastrelid + WHERE c.relname = 'vac_option_tab' OR s.relname = 'vac_option_tab' + ORDER BY rel; +VACUUM (PROCESS_TOAST TRUE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; + rel | vacuum_count +-------+-------------- + main | 1 + toast | 1 +(2 rows) + +VACUUM (PROCESS_TOAST FALSE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; + rel | vacuum_count +-------+-------------- + main | 2 + toast | 1 +(2 rows) + +VACUUM (PROCESS_TOAST FALSE, FULL) vac_option_tab; -- error ERROR: PROCESS_TOAST required with VACUUM FULL -- SKIP_DATABASE_STATS option VACUUM (SKIP_DATABASE_STATS) vactst; @@ -288,6 +314,8 @@ VACUUM (SKIP_DATABASE_STATS) vactst; VACUUM (ONLY_DATABASE_STATS); VACUUM (ONLY_DATABASE_STATS) vactst; -- error ERROR: ONLY_DATABASE_STATS cannot be specified with a list of tables +DROP VIEW vac_option_tab_counts; +DROP TABLE vac_option_tab; DROP TABLE vaccluster; DROP TABLE vactst; DROP TABLE vacparted; diff --git a/src/test/regress/sql/vacuum.sql b/src/test/regress/sql/vacuum.sql index 9da8f3e8303..364d297a6e4 100644 --- a/src/test/regress/sql/vacuum.sql +++ b/src/test/regress/sql/vacuum.sql @@ -232,10 +232,24 @@ ANALYZE vactst; COMMIT; -- PROCESS_TOAST option -ALTER TABLE vactst ADD COLUMN t TEXT; -ALTER TABLE vactst ALTER COLUMN t SET STORAGE EXTERNAL; -VACUUM (PROCESS_TOAST FALSE) vactst; -VACUUM (PROCESS_TOAST FALSE, FULL) vactst; +CREATE TABLE vac_option_tab (a INT, t TEXT); +INSERT INTO vac_option_tab SELECT a, 't' || a FROM generate_series(1, 10) AS a; +ALTER TABLE vac_option_tab ALTER COLUMN t SET STORAGE EXTERNAL; +-- Check the number of vacuums done on table vac_option_tab and on its +-- toast relation, to check that PROCESS_TOAST works on what it should. +CREATE VIEW vac_option_tab_counts AS + SELECT CASE WHEN c.relname IS NULL + THEN 'main' ELSE 'toast' END as rel, + s.vacuum_count + FROM pg_stat_all_tables s + LEFT JOIN pg_class c ON s.relid = c.reltoastrelid + WHERE c.relname = 'vac_option_tab' OR s.relname = 'vac_option_tab' + ORDER BY rel; +VACUUM (PROCESS_TOAST TRUE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +VACUUM (PROCESS_TOAST FALSE) vac_option_tab; +SELECT * FROM vac_option_tab_counts; +VACUUM (PROCESS_TOAST FALSE, FULL) vac_option_tab; -- error -- SKIP_DATABASE_STATS option VACUUM (SKIP_DATABASE_STATS) vactst; @@ -244,6 +258,8 @@ VACUUM (SKIP_DATABASE_STATS) vactst; VACUUM (ONLY_DATABASE_STATS); VACUUM (ONLY_DATABASE_STATS) vactst; -- error +DROP VIEW vac_option_tab_counts; +DROP TABLE vac_option_tab; DROP TABLE vaccluster; DROP TABLE vactst; DROP TABLE vacparted;