pg_ivm/sql/refresh_immv.sql

55 lines
1.5 KiB
MySQL
Raw Normal View History

CREATE TABLE t (i int PRIMARY KEY);
INSERT INTO t SELECT generate_series(1, 5);
SELECT create_immv('mv', 'SELECT * FROM t');
SELECT immvrelid, ispopulated FROM pg_ivm_immv ORDER BY 1;
-- Refresh IMMV with data
SELECT refresh_immv('mv', true);
SELECT immvrelid, ispopulated FROM pg_ivm_immv ORDER BY 1;
INSERT INTO t VALUES(6);
SELECT i FROM mv ORDER BY 1;
-- Make IMMV unpopulated
SELECT refresh_immv('mv', false);
SELECT immvrelid, ispopulated FROM pg_ivm_immv ORDER BY 1;
SELECT i FROM mv ORDER BY 1;
-- Immediate maintenance is disabled. IMMV can be scannable and is empty.
INSERT INTO t VALUES(7);
SELECT i FROM mv ORDER BY 1;
-- Refresh the IMMV and make it populated.
SELECT refresh_immv('mv', true);
SELECT immvrelid, ispopulated FROM pg_ivm_immv ORDER BY 1;
SELECT i FROM mv ORDER BY 1;
-- Immediate maintenance is enabled.
INSERT INTO t VALUES(8);
SELECT i FROM mv ORDER BY 1;
-- Use qualified name
SELECT refresh_immv('public.mv', true);
-- Use not existing IMMV
SELECT refresh_immv('mv_not_existing', true);
-- Try to refresh a normal table -- error
SELECT refresh_immv('t', true);
-- Create partitioned table
CREATE TABLE foo (id integer) PARTITION BY RANGE(id);
CREATE TABLE foo_default PARTITION OF foo DEFAULT;
INSERT INTO foo VALUES (1), (2), (3);
SELECT create_immv('foo_mv', 'SELECT COUNT(*) as count FROM foo');
SELECT count FROM foo_mv;
ALTER TABLE foo DETACH PARTITION foo_default;
SELECT count FROM foo_mv;
ALTER TABLE foo ATTACH PARTITION foo_default DEFAULT;
SELECT count FROM foo_mv;