Thread: Improve tab completion for COPY
Hi, I noticed that REJECT_LIMIT, an option available for COPY FROM, is not currently supported in psql's tab completion. Additionally, some options are only valid for COPY FROM or COPY TO, i.e. FREEZE, ON_ERROR, FORCE_QUOTE, but psql currently suggests them for both COPY FROM and COPY TO. As the number of COPY options continues to grow, I feel that having irrelevant suggestions makes tab completion noisier. Attached patch splits the tab completion rules between COPY FROM and COPY TO, so that only the appropriate options are suggested for each. What do you think? Regards, -- Atsushi Torikoshi Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K.
Attachment
On Wed, 7 May 2025 15:39:26 +0900 torikoshia <torikoshia@oss.nttdata.com> wrote: > Hi, > > I noticed that REJECT_LIMIT, an option available for COPY FROM, is not > currently supported in psql's tab completion. > > Additionally, some options are only valid for COPY FROM or COPY TO, i.e. > FREEZE, ON_ERROR, FORCE_QUOTE, but psql currently suggests them for both > COPY FROM and COPY TO. > As the number of COPY options continues to grow, I feel that having > irrelevant suggestions makes tab completion noisier. Indeed eliminating irrelevant suggestions would improve user experience, but I think there is a drawback that it increases code maintenance for adding options used both in COPY FROM and TO. This might be trivial until the number of common options are small as now, though. Perhaps, the redundant code could be reduced by preparing a list (an array of const char*) containing common options part, then appending options specific to each mode using some function like kind of append_variable_names, and passing these lists to COMPLETE_WITH_LIST. Regards, Yugo Nagata > Attached patch splits the tab completion rules between COPY FROM and > COPY TO, so that only the appropriate options are suggested for each. > > What do you think? > > > Regards, > > -- > Atsushi Torikoshi > Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K. -- Yugo Nagata <nagata@sraoss.co.jp>
On Thu, 8 May 2025 21:39:10 +0900 torikoshia <torikoshia@oss.nttdata.com> wrote: > Thanks for your comments! > > On 2025-05-08 08:53, Yugo Nagata wrote: > > On Wed, 7 May 2025 14:36:35 -0700 > > Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > > >> On Wed, May 7, 2025 at 6:23 AM Yugo Nagata <nagata@sraoss.co.jp> > >> wrote: > >> > > >> > On Wed, 7 May 2025 15:39:26 +0900 > >> > torikoshia <torikoshia@oss.nttdata.com> wrote: > >> > > >> > > Hi, > >> > > > >> > > I noticed that REJECT_LIMIT, an option available for COPY FROM, is not > >> > > currently supported in psql's tab completion. > >> > > > >> > > Additionally, some options are only valid for COPY FROM or COPY TO, i.e. > >> > > FREEZE, ON_ERROR, FORCE_QUOTE, but psql currently suggests them for both > >> > > COPY FROM and COPY TO. > >> > > As the number of COPY options continues to grow, I feel that having > >> > > irrelevant suggestions makes tab completion noisier. > >> > > >> > Indeed eliminating irrelevant suggestions would improve user experience, > >> > >> +1 > >> > >> > but I think there is a drawback that it increases code maintenance for > >> > adding options used both in COPY FROM and TO. This might be trivial until > >> > the number of common options are small as now, though. > >> > > >> > Perhaps, the redundant code could be reduced by preparing a list (an array > >> > of const char*) containing common options part, then appending options > >> > specific to each mode using some function like kind of append_variable_names, > >> > and passing these lists to COMPLETE_WITH_LIST. > >> > >> Or we can simply #define the common option list and #define two lists > >> for COPY TO and COPY FROM by concatenating the common option list, > >> like we do for ALTER PROCEDURE/ROUTINE/FUNCTION options. > > > > +1 > > Agreed. > I think attached patch implemented the suggested way. Thank you for updating the patch. It looks good and I confirmed that this works as expected. Regards, Yugo Nagata > > -- > Regards, > > -- > Atsushi Torikoshi > Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K. -- Yugo Nagata <nagata@sraoss.co.jp>
On 2025-06-03 17:58, Yugo Nagata wrote: > Thank you for updating the patch. > It looks good and I confirmed that this works as expected. Thanks for your review! BTW this is a small patch, but it does two things: (1) adds tab completion support for the REJECT_LIMIT option, which was introduced in v18 (2) splits the tab completion logic between COPY FROM and COPY TO to reflect their different options. While maybe (2) should be postponed to v19 or later, I think it would be better to include (1) in v18. So I’ve split them into separate patches accordingly. -- Atsushi Torikoshi Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K.
Attachment
On Tue, 10 Jun 2025 11:15:09 +0900 torikoshia <torikoshia@oss.nttdata.com> wrote: > On 2025-06-03 17:58, Yugo Nagata wrote: > > Thank you for updating the patch. > > It looks good and I confirmed that this works as expected. > > Thanks for your review! > > BTW this is a small patch, but it does two things: > > (1) adds tab completion support for the REJECT_LIMIT option, which was > introduced in v18 > (2) splits the tab completion logic between COPY FROM and COPY TO to > reflect their different options. > > While maybe (2) should be postponed to v19 or later, I think it would be > better to include (1) in v18. > So I’ve split them into separate patches accordingly. I am not convinced whether (1) should be regarded as a v18-related oversight or a new feature, but if this is a oversight, this should be added to the open items list? https://wiki.postgresql.org/wiki/PostgreSQL_18_Open_Items Regards, Yugo Nagata -- Yugo Nagata <nagata@sraoss.co.jp>
On Tue, Jun 10, 2025 at 12:37:48PM -0700, Masahiko Sawada wrote: >> > (1) adds tab completion support for the REJECT_LIMIT option, which was >> > introduced in v18 >> > (2) splits the tab completion logic between COPY FROM and COPY TO to >> > reflect their different options. > > [...] > > Given REJECT_LIMIT is a new v18 feature, it seems to me that (1) is an > oversight of this feature, but I also agree that it's not a bug and > doesn't block the release. > > How does the RMT feel about the change (1)? Nathan, would you be OK with that? 0001 sure seems like an oversight in commit 4ac2a9b to me. In any case, I argued that we should fix tab completion for unlogged partitioned tables in v18 [0], and this seems pretty similar. TBH I'd even say that 0002 is fixing a bug and could be back-patched. I've added rmt@ here in case Tomas or Heikki feel differently. [0] https://postgr.es/m/aEH4XYwrlyvjZUvE%40nathan -- nathan
On Tue, Jun 10, 2025 at 1:33 PM Nathan Bossart <nathandbossart@gmail.com> wrote: > > On Tue, Jun 10, 2025 at 12:37:48PM -0700, Masahiko Sawada wrote: > >> > (1) adds tab completion support for the REJECT_LIMIT option, which was > >> > introduced in v18 > >> > (2) splits the tab completion logic between COPY FROM and COPY TO to > >> > reflect their different options. > > > > [...] > > > > Given REJECT_LIMIT is a new v18 feature, it seems to me that (1) is an > > oversight of this feature, but I also agree that it's not a bug and > > doesn't block the release. > > > > How does the RMT feel about the change (1)? Nathan, would you be OK with that? > > 0001 sure seems like an oversight in commit 4ac2a9b to me. In any case, I > argued that we should fix tab completion for unlogged partitioned tables in > v18 [0], and this seems pretty similar. > > > TBH I'd even say that 0002 is fixing a bug and could be back-patched. I've > added rmt@ here in case Tomas or Heikki feel differently. Thank you for your confirmation. I've just pushed the change (1) and am waiting for more comments on the change (2). Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com
On Wed, Jul 2, 2025 at 2:46 PM torikoshia <torikoshia@oss.nttdata.com> wrote: > > On 2025-07-01 14:20, Masahiko Sawada wrote: > > On Thu, Jun 12, 2025 at 3:47 AM Masahiko Sawada <sawada.mshk@gmail.com> > > wrote: > >> > >> On Tue, Jun 10, 2025 at 1:33 PM Nathan Bossart > >> <nathandbossart@gmail.com> wrote: > >> > > >> > On Tue, Jun 10, 2025 at 12:37:48PM -0700, Masahiko Sawada wrote: > >> > >> > (1) adds tab completion support for the REJECT_LIMIT option, which was > >> > >> > introduced in v18 > >> > >> > (2) splits the tab completion logic between COPY FROM and COPY TO to > >> > >> > reflect their different options. > >> > > > >> > > [...] > >> > > > >> > > Given REJECT_LIMIT is a new v18 feature, it seems to me that (1) is an > >> > > oversight of this feature, but I also agree that it's not a bug and > >> > > doesn't block the release. > >> > > > >> > > How does the RMT feel about the change (1)? Nathan, would you be OK with that? > >> > > >> > 0001 sure seems like an oversight in commit 4ac2a9b to me. In any case, I > >> > argued that we should fix tab completion for unlogged partitioned tables in > >> > v18 [0], and this seems pretty similar. > >> > > >> > > >> > TBH I'd even say that 0002 is fixing a bug and could be back-patched. I've > >> > added rmt@ here in case Tomas or Heikki feel differently. > >> > >> Thank you for your confirmation. I've just pushed the change (1) and > >> am waiting for more comments on the change (2). > >> > > > > Thinking of the 0002 patch, I'm also inclined to agree that this fixes > > a bogus tab completion behavior for COPY command and can be > > back-patched to v14. In v14, c273d9d8ce reworked the tab completion > > for COPY command and supports the completion for the options of FORMAT > > within a WITH clause so we cannot back-patch it to v13. > > Agreed. > > > Torikoshi-san, could you please prepare the patch for other branches > > too if you agree with this direction? > > Sure! Attached patches. Thank you for updating the patches! The patches mostly look good to me. As for v3-0002-Improve-tab-completion-for-COPY-options_v17.patch, please note that we don't support REJECT_LIMIT in v17: +/* COPY FROM options */ +#define Copy_from_options \ +Copy_common_options, "DEFAULT", "FORCE_NOT_NULL", "FORCE_NULL", "FREEZE", \ +"LOG_VERBOSITY", "ON_ERROR", "REJECT_LIMIT" I've attached the updated patches that addressed the above issue and updated the commit messages. Please review them. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com
Attachment
- REL16_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch
- REL17_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch
- REL18_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch
- REL15_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch
- master_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch
- REL14_v4-0001-Fix-tab-completion-for-COPY-and-copy-options.patch