Из руководства.
CREATE MATERIALIZED VIEW аналогичен CREATE TABLE AS, за исключением того, что он также запоминает запрос, использованный для инициализации представления, чтобы его можно было обновить позже по запросу.
Насколько я понимаю, обновление материализованного представления должно иметь тот же эффект, что и recreate view as
. Но это не то, что происходит здесь.
Создайте таблицу с одним столбцом
drop table if exists t cascade;
create table t (a int);
insert into t (a) values (1);
Создайте материализованное представление
create materialized view mat_view_t as
select * from t ;
select * from mat_view_t;
a
---
1
Теперь столбец добавлен в исходную таблицу
alter table t add column b int;
\d t
Table "public.t"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
b | integer |
И затем материализованное представление обновляется
refresh materialized view mat_view_t;
select * from mat_view_t;
a
---
1
\d mat_view_t
Materialized view "public.mat_view_t"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
Где новая колонка? Это ожидаемое поведение? Если это так, то я думаю, что руководство вводит в заблуждение.