| From: | Peter Smith <smithpb2250(at)gmail(dot)com> |
|---|---|
| To: | solai v <solai(dot)cdac(at)gmail(dot)com> |
| Cc: | Hüseyin Demir <huseyin(dot)d3r(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: PSQL - improve tab completion for pub/sub options |
| Date: | 2026-11-03 08:02:24 |
| Message-ID: | CAHut+PtPSnSS-m078n3GBnXaQkLD0Oto9qaxq=PfjOHiPSfp1Q@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Solai,
Thanks for testing my patch!
On Fri, Oct 30, 2026 at 4:36 PM solai v <solai(dot)cdac(at)gmail(dot)com> wrote:
...
>
> Thank you for the updated patch. I tested the tab-completion behaviour
> for publication and subscription options and inspected the relevant
> completion logic in src/bin/psql/tab-complete.in.c. The completion
> suggestions are displayed correctly when the cursor is immediately
> after the opening parenthesis. For example: ALTER PUBLICATION test_pub
> SET (
> However, the suggestions are not displayed when entering subsequent
> options after a comma. For example: ALTER PUBLICATION test_pub SET
> (publish = 'insert',
IIUC, the problem is only that there was no space after the comma. If
you add a space, it works fine:
ALTER PUBLICATION test_pub SET (publish = 'insert', <TAB>
> I investigated the relevant completion conditions and the
> complete_from_list() implementation in src/bin/psql/tab-complete.c.
> The current completion logic attempts to handle this case using
> text[0] == ','. However, complete_from_list() uses the current text as
> a prefix when filtering the completion candidates. Since the prefix is
> a comma, it does not match the available option names, and
> consequently no suggestions are displayed.
I'm not sure what "text[0] == ','" check you're referring to. The
comma handling is only this:
if (ends_with(prev_wd, '(') || ends_with(prev_wd, ','))
With the space, the word being completed is empty and prev_wd is
"'insert',", so the above matches and the options are offered. The
other comma-separated lists in tab-complete.in.c also expect a space
after the comma. e.g. the existing "CREATE PUBLICATION ... FOR ALL
TABLES EXCEPT ( ..." uses (!ends_with(prev_wd, ',')) in the same way.
> I also checked the WORD_BREAKS definition and observed that the comma
> is not currently included in it. Could you please look into this
> behaviour and consider an appropriate way to support completion after
> commas without affecting other existing psql completion contexts?
>
AFAIK, that is a known limitation of psql tab-completion in general;
it is not specific to this patch.
The WORD_BREAKS question has come up a few times before:
* Actually, I proposed adding the comma to WORD_BREAKS back in 2022
[1]. Tom Lane replied [2] that the WORD_BREAKS list looked quite
random, and said he would like to see it populated more fully, with
the reasons for any omissions documented.
* In April 2024, Tom Lane wondered again why comma isn't in there [3].
So, changing WORD_BREAKS might be worthwhile, but it would need its
own thread (and ideally more tab-complete test coverage), because it
affects all psql tab-completion, not just pub/sub options. Therefore,
I think it is out of scope for this patch.
======
[1] https://www.postgresql.org/message-id/CAHut%2BPvUShR5SHgm2pUj_8xcH%3D8CmqBjFcOdvjx%2B1j6b%3D_K2DQ%40mail.gmail.com
[2] https://www.postgresql.org/message-id/431600.1642554676%40sss.pgh.pa.us
[3] https://www.postgresql.org/message-id/3870833.1712696581%40sss.pgh.pa.us
Kind Regards,
Peter Smith.
Fujitsu Australia
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Ilia Evdokimov | 2026-11-03 08:11:12 | Re: Assertion failure when importing expression statistics with nested JSON values |
| Previous Message | Zsolt Parragi | 2026-11-03 08:01:08 | Re: pgbench --unlogged-tables silently ignored for branches/tellers/history when --partitions is used |