text: -- This file and its contents are licensed under the Apache License 2.0.
  -- Please see the included NOTICE for copyright information and
  -- LICENSE-APACHE for a copy of the license.
  
  -- PG13 introduced parallel VACUUM functionality. It gets invoked when a table
  -- has two or more indexes on it. Read up more at
  -- https://www.postgresql.org/docs/13/sql-vacuum.html#PARALLEL
  
  CREATE TABLE vacuum_test(time timestamp NOT NULL, temp1 float, temp2 int);
  
  -- create hypertable
  -- we create chunks in public schema cause otherwise we would need
  -- elevated privileges to create indexes directly
  SELECT create_hypertable('vacuum_test', 'time', create_default_indexes => false, associated_schema_name => 'public');
  
  -- parallel vacuum needs the index size to be larger than min_parallel_index_scan_size to kick in
  SET min_parallel_index_scan_size TO 0;
  INSERT INTO vacuum_test SELECT TIMESTAMP 'epoch' + (i * INTERVAL '4h'),
                  i, i+1 FROM generate_series(1, 100) as T(i);
  
  -- create indexes on the temp columns
  -- we create indexes manually because otherwise vacuum verbose output
  -- would be different between 13.2 and 13.3+
  -- 13.2 would try to vacuum the parent table index too while 13.3+ wouldn't
  CREATE INDEX ON _hyper_1_1_chunk(time);
  CREATE INDEX ON _hyper_1_1_chunk(temp1);
  CREATE INDEX ON _hyper_1_1_chunk(temp2);
  CREATE INDEX ON _hyper_1_2_chunk(time);
  CREATE INDEX ON _hyper_1_2_chunk(temp1);
  CREATE INDEX ON _hyper_1_2_chunk(temp2);
  CREATE INDEX ON _hyper_1_3_chunk(time);
  CREATE INDEX ON _hyper_1_3_chunk(temp1);
  CREATE INDEX ON _hyper_1_3_chunk(temp2);
  
  -- INSERT only will not trigger vacuum on indexes for PG13.3+
  UPDATE vacuum_test SET time = time + '1s'::interval, temp1 = random(), temp2 = random();
  
  -- we should see two parallel workers for each chunk
  VACUUM (PARALLEL 3, VERBOSE) vacuum_test;
  
  DROP TABLE vacuum_test;
  