When creating materialized views, use REFRESH to load data.
authorJeff Davis <jdavis@postgresql.org>
Tue, 16 Jul 2024 22:41:29 +0000 (15:41 -0700)
committerJeff Davis <jdavis@postgresql.org>
Tue, 16 Jul 2024 22:41:29 +0000 (15:41 -0700)
commit4b74ebf726d444ba820830cad986a1f92f724649
tree7b985099966a2649debd6628f4f416baf8467108
parent0a8ca122e511884d98a640cb3302866b74638688
When creating materialized views, use REFRESH to load data.

Previously, CREATE MATERIALIZED VIEW ... WITH DATA populated the MV
the same way as CREATE TABLE ... AS.

Instead, reuse the REFRESH logic, which locks down security-restricted
operations and restricts the search_path. This reduces the chance that
a subsequent refresh will fail.

Reported-by: Noah Misch
Backpatch-through: 17
Discussion: https://postgr.es/m/20240630222344.db.nmisch@google.com
src/backend/commands/createas.c
src/backend/commands/matview.c
src/include/commands/matview.h
src/test/regress/expected/namespace.out