Re: Fix array-element quoting in postgres_fdw import statistics

Etsuro Fujita <etsuro.fujita@gmail.com>

From: Etsuro Fujita <etsuro.fujita@gmail.com>
To: SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Corey Huinker <corey.huinker@gmail.com>, efujita@postgresql.org
Date: 2026-04-21T10:55:55Z
Lists: pgsql-hackers
On Sun, Apr 12, 2026 at 3:46 PM Etsuro Fujita <etsuro.fujita@gmail.com> wrote:
> On Sun, Apr 12, 2026 at 12:13 PM SATYANARAYANA NARLAPURAM
> <satyanarlapuram@gmail.com> wrote:
> > build_remattrmap() used quote_identifier() to format column names
> > for a text[] array literal passed to the remote pg_stats query.
> > quote_identifier() applies SQL identifier quoting, which doubles
> > double-quote characters but does not escape backslashes.  However,
> > inside a PostgreSQL array literal, backslash is an escape character.
> >
> > Column names containing backslashes (e.g. "a\b") were silently
> > mangled by the array parser—"a\b" became "ab"—causing the
> > WHERE attname = ANY('{...}') filter to miss those columns.  The
> > statistics import would then fail with a WARNING about missing
> > attribute statistics. This is a very corner cases because usually
> > backslash is not included in the column names. Anyways attached
> > a draft patch. Please take a look and let me know what you think.

> Good catch!  I will look into this as well.

I think your analysis is correct, but a simpler solution for this
issue is to use deparseStringLiteral() for column names, instead of
quote_identifier(), as proposed in [1].

Best regards,
Etsuro Fujita

[1] https://www.postgresql.org/message-id/CAJTYsWWGhVDFjr%2BsmdYdU-Q_TT9YMzXA4QcLCr7rizDOyrEEow%40mail.gmail.com



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. postgres_fdw: Fix deparsing of remote column names in stats import.