Re: Avoid calling SetMatViewPopulatedState if possible

From: David Geier <geidav(dot)pg(at)gmail(dot)com>
To: cca5507 <cca5507(at)qq(dot)com>, pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Avoid calling SetMatViewPopulatedState if possible
Date: 2026-05-07 15:46:19
Message-ID: 8cfab7f1-30d6-45d2-906f-a5dce0f0978d@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 05.05.2026 13:58, cca5507 wrote:
>> While being a simple patch, it would be good to know what actual use
>> cases this change improves on and by how much. Can you share a test case
>> and/or performance data?
>
> The improvement of performance is small, so it's hard to observe it. But I think
> the patch is still useful because we can avoid generating dead pg_class tuple:
>
> create table t(a int);
> create materialized view m as select a from t;
> create unique index on m(a);
> select ctid from pg_class where relname = 'm';
> refresh materialized view concurrently m;
> select ctid from pg_class where relname = 'm';
>
> Before the patch, the ctid will change every time we refresh the matview.

Yeah, that's kind of what I had in mind as I wasn't expecting the
performance to matter much here. Avoiding the bloat seems generally
reasonable.

But refreshing a materialized view doesn't only change relispopulated
but also columns like relfilenode, relpages, relhasindex, etc. Doesn't
changing these columns during REFRESH MATERIALIZED VIEW make your
optimization applicable in a lot less cases?

I'm actually wondering why it works at all, even in the example you
gave. Because I thought that even when nothing has changed the pg_class
row is updated for more columns than just relispopulated.

--
David Geier

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2026-05-07 15:48:04 Re: Broken build on macOS (Universal / Intel): cpuid instruction not available
Previous Message Jakob Egger 2026-05-07 15:41:00 Re: Broken build on macOS (Universal / Intel): cpuid instruction not available