On Wed Jan 7, 2026 at 3:04 AM -03, Corey Huinker wrote:
> Anyway, here's v8, incorporating the documentation feedback and Matheus's
> notes.
>
+CREATE FOREIGN TABLE remote_analyze_ftable (id int, a text, b bigint)
+ SERVER loopback
+ OPTIONS (table_name 'remote_analyze_table',
+ fetch_stats 'true',
+ remote_analyze 'true');
I think that it would be good also to have a test case where
remote_analyze is false. The test could manually execute an ANALYZE on
the target table and ensure that an ANALYZE on the foreign table fetch
the statistics correctly.
---
If the table don't have columns it fails to fetch the statistics with
remote_analyze=false even if the target table has statistics:
ERROR: P0002: Failed to import statistics from remote table public.t2, no statistics found.
And if I set remote_analyze=true it fails with the following error:
postgres=# analyze t2_fdw;
ERROR: 08006: could not obtain message string for remote error
CONTEXT: remote SQL command: SELECT DISTINCT ON (s.attname) attname,
s.null_frac, s.avg_width, s.n_distinct, s.most_common_vals,
s.most_common_freqs, s.histogram_bounds, s.correlation,
s.most_common_elems, s.most_common_elem_freqs, s.elem_count_histogram,
s.range_length_histogram, s.range_empty_frac, s.range_bounds_histogram
FROM pg_catalog.pg_stats AS s WHERE s.schemaname = $1 AND s.tablename =
$2 AND s.attname = ANY($3::text[]) ORDER BY s.attname, s.inherited DESC
LOCATION: pgfdw_report_internal, connection.c:1037
---
If we try to run ANALYZE on a specific table column that don't exists we
get:
postgres=# analyze t(c);
ERROR: 42703: column "c" of relation "t" does not exist
LOCATION: do_analyze_rel, analyze.c:412
With fetch_stats=false we get the same error:
postgres=# ALTER FOREIGN TABLE t_fdw OPTIONS (add fetch_stats 'false');
ALTER FOREIGN TABLE
postgres=# ANALYZE t_fdw(c);
ERROR: 42703: column "c" of relation "t_fdw" does not exist
But with fetch_stats=true we get a different error:
postgres=# ALTER FOREIGN TABLE t_fdw OPTIONS (drop fetch_stats);
ALTER FOREIGN TABLE
postgres=# ANALYZE t_fdw(c);
ERROR: P0002: Failed to import statistics from remote table public.t, no statistics found.
Should all these errors be consistency?
---
I hope that these comments are more useful now. Thanks.
--
Matheus Alcantara
EDB: https://www.enterprisedb.com