Subject: Add missing CHECK_FOR_INTERRUPTS in autovacuum catalog scan loops

From: Lakshmi N <[email-masked]>
Date: Fri, 10 Apr 2026 01:38:53 -0700

Hi hackers,

I noticed CFI is missing while scanning pg_class for RELKIND_RELATION and
RELKIND_TOASTVALUE. On a database with several thousands of tables, these
scans can take a noticeable amount of time. Attached a patch to address
this.

Regards,
Lakshmi

---

From: Dapeng Wang <[email-masked]>
Date: Fri, 10 Apr 2026 19:57:22 +0800

> scans can take a noticeable amount of time. Attached a patch to address
Hi Lakshmi,

The patch applies cleanly to HEAD and compiles without warnings.
make check passes (one unrelated ICU collation diff).

The two CHECK_FOR_INTERRUPTS() additions in do_autovacuum() look
correct and are well-placed at the top of each loop iteration,
before any resources are acquired.

I noticed there are other similar catalog scan loops in
autovacuum.c that also lack CHECK_FOR_INTERRUPTS():

- The pg_database scan loop around line 1854
- The pg_class scan loop around line 3664

Should those be covered as well?

Regards,
Dapeng Wang

---

From: Lakshmi N <[email-masked]>
Date: Fri, 10 Apr 2026 22:02:02 -0700

Hi,

> Should those be covered as well?

Updated the patch covering those two as well.

Regards,
Lakshmi

---

From: Dapeng Wang <[email-masked]>
Date: Sat, 11 Apr 2026 20:19:55 +0800

Lakshmi N <[email-masked]> 于2026年4月11日周六 13:02写道：

>>> I noticed CFI is missing while scanning pg_class for RELKIND_RELATION
>>> and RELKIND_TOASTVALUE. On a database with several thousands of tables,
>>> these scans can take a noticeable amount of time. Attached a patch to
>>> address this.
>>>
>>> Regards,
>>> Lakshmi
>>>
>> Hi Lakshmi,
>>

Hi Lakshmi,

The updated patch now covers all four catalog scan loops.
Applies cleanly, compiles without warnings, and all 247
regression tests pass.

Regards,
Dapeng Wang

---

From: Sami Imseih <[email-masked]>
Date: Sat, 11 Apr 2026 15:10:42 -0500

Hi,

It was discussed [1] here if C_F_I is needed in these
do_autovacuum/autovacuum_scores code paths, and it
was decided not to add them.

Also, at least on my tests with 100k evern with 1 million tables, I did
not see a reason to do so. These are catalog scans that should
happen quick enough, even in extreme cases, to not make
this worthwhile.

Others may have another opinion.

--
Sami

[1] [https://www.postgresql.org/message-id/acwTxpz3Toxt0ty8%40nathan]