MinGW ccache snafu on CI

Thomas Munro <thomas.munro@gmail.com>

From: Thomas Munro <thomas.munro@gmail.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-07-04T04:44:47Z
Lists: pgsql-hackers
Hi,

As previously reported[1] (also discussed on Discord a few times), the
MinGW CI job is capable of getting confused like this:

Cache restored from key: ccache:windows-mingw:thread-work:28559723796:1

# check for "D:/a/postgres/postgres/build/tmp_install/usr/local/pgsql/bin/vacuumdb"
failed: incorrect version: found "vacuumdb (PostgreSQL) 19beta1",
expected "vacuumdb (PostgreSQL) 20devel"

Apparently ccache failed to recompile stuff that it should have, and
produced a stale .o from an earlier build in the same repo/branch.
While "19beta1" and "20devel" have the same length, I doubt that a
mere few hundred monkeys with typewriters have found multiple hash
collisions...

One observation is that the MinGW job is using precompiled headers
(-Db_pch=true).  I wonder if we might be using the wrong switches[2],
but I don't claim to understand that stuff...

So is the MSVC job, but I don't recall hearing of any problems there.

[1] https://www.postgresql.org/message-id/flat/E1vOJwR-001XFf-0r%40gemulon.postgresql.org
[2] https://ccache.dev/manual/4.1.html#_precompiled_headers