sraoss / pgsql-ivm

IVM (Incremental View Maintenance) development for PostgreSQL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UPDATE to base table causes an ERROR

tatsuo-ishii opened this issue · comments

CREATE INCREMENTAL MATERIALIZED VIEW mv3 AS SELECT min(abalance),max(abalance),avg(abalance) FROM pgbench_accounts;
test=# UPDATE pgbench_accounts SET abalance = abalance + 10 WHERE aid = 10853;
ERROR: syntax error at end of input
LINE 1: ...blic.mv3 AS mv USING t WHERE mv.ctid = t.ctid AND for_dlt )
^
QUERY: WITH t AS ( SELECT diff.ivm_count, diff.min, diff.ivm_count_min, diff.max, diff.ivm_count_max, diff.avg, diff.ivm_sum_avg, diff.ivm_count_avg, (diff.ivm_count = mv.ivm_count) AS for_dlt, mv.ctid FROM public.mv3 AS mv, pg_temp_3.pg_temp_16548 AS diff WHERE (1) = (1)), updt AS ( UPDATE public.mv3 AS mv SET ivm_count = mv.ivm_count - t.ivm_count, min = CASE WHEN mv.ivm_count_min = t.ivm_count_min THEN NULL ELSE mv.min END, ivm_count_min = mv.ivm_count_min - t.ivm_count_min, max = CASE WHEN mv.ivm_count_max = t.ivm_count_max THEN NULL ELSE mv.max END, ivm_count_max = mv.ivm_count_max - t.ivm_count_max, avg = CASE WHEN mv.ivm_count_avg = t.ivm_count_avg THEN NULL ELSE (COALESCE(mv.ivm_sum_avg,0) - COALESCE(t.ivm_sum_avg, 0))::numeric / (mv.ivm_count_avg - t.ivm_count_avg) END, ivm_sum_avg = COALESCE(mv.ivm_sum_avg,0) - COALESCE(t.ivm_sum_avg, 0), ivm_count_avg = mv.ivm_count_avg - t.ivm_count_avg FROM t WHERE mv.ctid = t.ctid AND NOT for_dlt RETURNING mv.ctid, (mv.min >= t.min OR mv.max <= t.max) AS recalc), dlt AS ( DELETE FROM public.mv3 AS mv USING t WHERE mv.ctid = t.ctid AND for_dlt )

I'm working on this

I confirmed this has been fixed.