Re: Fix tab completion after EXCEPT (...) in IMPORT FOREIGN SCHEMA

From: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>
To: shveta malik <shveta(dot)malik(at)gmail(dot)com>
Cc: vignesh C <vignesh21(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Fix tab completion after EXCEPT (...) in IMPORT FOREIGN SCHEMA
Date: 2026-04-16 17:09:32
Message-ID: CAHGQGwGeg-JaD2s6TW7VpNJC_GyJRZ-cOkrp8uwnjN+=4mf=xw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Apr 16, 2026 at 1:00 PM shveta malik <shveta(dot)malik(at)gmail(dot)com> wrote:
>
> On Wed, Apr 15, 2026 at 8:45 PM vignesh C <vignesh21(at)gmail(dot)com> wrote:
> >
> > Hi all,
> >
> > While reviewing tab completion behavior, I noticed an issue after
> > EXCEPT (...) support was added to CREATE PUBLICATION.
> > Currently, after typing:
> > IMPORT FOREIGN SCHEMA public EXCEPT (t1)
> >
> > psql correctly suggests FROM SERVER. However, the existing completion
> > rule uses a generic:
> > TailMatches("EXCEPT", "(*)")
> >
> > Previously this was safe because no other command used EXCEPT (...).
> > Now that CREATE PUBLICATION also supports EXCEPT (...), the same rule
> > can incorrectly match publication commands and suggest FROM SERVER
> > there as well.
> >
> > The attached patch fixes this by restricting the EXCEPT (...) path to
> > IMPORT FOREIGN SCHEMA using HeadMatches(), while preserving the
> > existing LIMIT TO (...) behavior.

Thanks for the patch!

- else if (TailMatches("LIMIT", "TO", "(*)") ||
+ else if (HeadMatches("IMPORT", "FOREIGN", "SCHEMA", MatchAny) &&
TailMatches("EXCEPT", "(*)"))
COMPLETE_WITH("FROM SERVER");
+ else if (TailMatches("LIMIT", "TO", "(*)"))
+ COMPLETE_WITH("FROM SERVER");

Do we really need to split this into two conditions? Wouldn't it be simpler
to keep a single condition?, for example:

-------------------
else if (TailMatches("LIMIT", "TO", "(*)") ||
- TailMatches("EXCEPT", "(*)"))
+ Matches("IMPORT", "FOREIGN", "SCHEMA", MatchAny, "EXCEPT", "(*)"))
COMPLETE_WITH("FROM SERVER");
-------------------

Regards,

--
Fujii Masao

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message SATYANARAYANA NARLAPURAM 2026-04-16 17:09:40 COPY FROM ON_ERROR SET_NULL bypasses domain NOT NULL with partial column list
Previous Message Zhijie Hou (Fujitsu) 2026-04-16 16:59:25 RE: Parallel Apply