summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/regress/expected/vacuum.out36
-rw-r--r--src/test/regress/sql/vacuum.sql24
2 files changed, 52 insertions, 8 deletions
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;