On Fri, Jun 19, 2026 at 6:23 AM Corey Huinker <[email protected]> wrote: > Attached are two patches to remove SPI from the postgres_fdw.c, replaced by > local C functions. The division into two patches is entirely for > readability. Separately, each one represents a half-measure that would > benefit no one. The first does the minimal changes needed to get the > relation-stats to stop using SPI, and the second does the same for attribute > stats, removes all vestiges of SPI from postgres_fdw.c, and adds some tests > to make sure that a foreign table has the exact stats of the source loopback > table. > > The function import_attribute_stats() is a bit parameter-happy, but that's > mostly necessary. I left the non-key parameters as all type char* because > that avoids even more "bool foo_isnull" parameters, and that allows the > caller to not have to rework the various stat types into their corresponding > C types (float, int4, float[], and the anyarrays that basically aren't > cast-able by any client program anyway). I'm open to requiring the caller to > use the right datatypes for some of the parameters, but as I said there is no > way to "win" with the anyarrays, and even the pg_restore_attribute_stats() > function falls back to type text for those. > > To be clear, this solves the SPI problem, but questions about the design of > attribute_statistics_update() and relation_statistics_update() remain, but > those concerns are now isolated within their respective files > attribute_stats.c and relation_stats.c. The inefficiencies therein aren't > really in a critical path, so if we wanted to leave them be until v20 they > could, but if time allows I'd at least like try unwinding some of that. But > first, let's get SPI out of postgres_fdw.c.
Ok, I'll review the patches. Thanks! Best regards, Etsuro Fujita
