postgres_fdw: Remove SPI from postgresImportForeignStatistics. Previously, this function imported remote statistics by executing SQL functions like pg_restore_relation_stats and pg_restore_attribute_stats via SPI (in read-write mode). As the SQL functions take a schema name and a relation name as two separate arguments, rather than a single OID argument, if the containing schema was concurrently renamed, the callback function would throw an error like this:
ERROR: schema "foo" does not exist To fix, 1) provide new interface functions to import remote statistics that are directly callable from FDWs and take a single OID, and 2) modify the callback function to use the interface functions instead when importing remote statistics. For #1, this commit does a bit of refactoring to relation_statistics_update and attribute_statistics_update, which are the workhorse functions for pg_restore_relation_stats and pg_restore_attribute_stats respectively: since they also take a schema name and a relation name, separate the guts of them into new functions so that they take a single OID and are callable not only from the workhorse functions but from the interface functions introduced by #1. Oversight in commit 28972b6fc. Reported-by: Robert Haas <[email protected]> Suggested-by: Robert Haas <[email protected]> Author: Corey Huinker <[email protected]> Co-authored-by: Etsuro Fujita <[email protected]> Discussion: https://postgr.es/m/CA%2BTgmoYqMtWb4zLUkT98oFnEkJ%3DWz0Pw-ggDJrp9wnSXPzUaeQ%40mail.gmail.com Backpatch-through: 19 Branch ------ REL_19_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/3334b0d9f25a897b8298c849d08909bdc532874a Modified Files -------------- contrib/postgres_fdw/expected/postgres_fdw.out | 37 +++ contrib/postgres_fdw/postgres_fdw.c | 443 ++++++++++--------------- contrib/postgres_fdw/sql/postgres_fdw.sql | 28 ++ doc/src/sgml/fdwhandler.sgml | 5 +- src/backend/statistics/attribute_stats.c | 174 ++++++++-- src/backend/statistics/relation_stats.c | 86 ++++- src/include/statistics/statistics.h | 25 ++ 7 files changed, 484 insertions(+), 314 deletions(-)
