psql: tab-completion support for COPY ... TO/FROM STDIN, STDOUT, and PROGRAM

Yugo Nagata <nagata@sraoss.co.jp>

From: Yugo Nagata <nagata@sraoss.co.jp>
To: Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2025-06-05T01:08:35Z
Lists: pgsql-hackers

Attachments

Hi,

Currently, tab completion for COPY only suggests filenames after TO or
FROM, even though STDIN, STDOUT, and PROGRAM are also valid syntax options.

I'd like to propose improving the tab completion behavior as described in
the subject, so that these keywords are suggested appropriately, and filenames
are offered as potential command names after the PROGRAM keyword.

I've attached this proposal as a patch series with the following three parts:


0001: Refactor match_previous_words() to remove direct use of rl_completion_matches()

This is a preparatory cleanup. Most completions in match_previous_words() already use 
COMPLETE_WITH* macros, which wrap rl_completion_matches(). However, some direct calls
still remain.

This patch replaces the remaining direct calls with COMPLETE_WITH_FILES or 
COMPLETE_WITH_GENERATOR, improving consistency and readability.

0002: Add tab completion support for COPY ... TO/FROM STDIN, STDOUT, and PROGRAM

This is the main patch. It extends tab completion to suggest STDIN, STDOUT, and PROGRAM
after TO or FROM. After PROGRAM, filenames are suggested as possible command names.

To support this, a new macro COMPLETE_WITH_FILES_PLUS is introduced. This allows
combining literal keywords with filename suggestions in the completion list.

0003: Improve tab completion for COPY option lists

Currently, only the first option in a parenthesized list is suggested during completion,
and nothing is suggested after a comma.

This patch enables suggestions after each comma, improving usability when specifying
multiple options.

Although not directly related to the main proposal, I believe this is a helpful enhancement
to COPY tab completion and included it here for completeness.

I’d appreciate your review and feedback on this series.


Best regards,
Yugo Nagata

-- 
Yugo Nagata <nagata@sraoss.co.jp>

Commits

  1. psql: Improve tab completion for COPY option lists.

  2. psql: Add tab completion for COPY ... PROGRAM.

  3. psql: Improve tab completion for COPY ... STDIN/STDOUT.

  4. psql: Add COMPLETE_WITH_FILES and COMPLETE_WITH_GENERATOR macros.

  5. Define a new, more extensible syntax for COPY options.