Hi! Cloudberry DB (Greenplum fork) uses IMMV feature for AQUMV (auto query use matview) feature, so i got interested in how it is implemented.
On Thu, 11 Jul 2024 at 09:24, Yugo NAGATA <nag...@sraoss.co.jp> wrote: > > I updated the patch to bump up the version numbers in psql and pg_dump codes > from 17 to 18. Few suggestions: 1) `Add-relisivm-column-to-pg_class-system-catalog` commit message should be fixed, there is "isimmv" in the last line. 2) I dont get why `Add-Incremental-View-Maintenance-support.patch` goes after 0005 & 0004. Shoulndt we first implement feature server side, only when client (psql & pg_dump) side? 3) Can we provide regression tests for each function separately? Test for main feature in main patch, test for DISTINCT support in v34-0007-Add-DISTINCT-support-for-IVM.patch etc? This way the patchset will be easier to review, and can be committed separelety. 4) v34-0006-Add-Incremental-View-Maintenance-support.patch no longer applies due to 4b74ebf726d444ba820830cad986a1f92f724649. After resolving issues manually, it does not compile, because 4b74ebf726d444ba820830cad986a1f92f724649 also removes save_userid/save_sec_context fields from ExecCreateTableAs. > if (RelationIsIVM(matviewRel) && stmt->skipData) Now this function accepts skipData param. 5) For DISTINCT support patch uses hidden __ivm* columns. Is this design discussed anywhere? I wonder if this is a necessity (only solution) or if there are alternatives. 6) What are the caveats of supporting some simple cases for aggregation funcs like in example? ``` regress=# CREATE INCREMENTAL MATERIALIZED VIEW mv_ivm_2 AS SELECT sum(j) + sum(i) from mv_base_a; ERROR: expression containing an aggregate in it is not supported on incrementally maintainable materialized view ``` I can see some difficulties with division CREATE IMMV .... AS SELECT 1/sum(i) from mv_base_a; (sum(i) == 0 case), but adding & multiplication should be ok, aren't they? Overall, patchset looks mature, however it is far from being committable due to lack of testing/feedback/discussion. There is only one way to fix this... Test and discuss it! [1] https://github.com/cloudberrydb/cloudberrydb