Re: Add partial :-variable expansion to psql \copy

Fabien COELHO <coelho@cri.ensmp.fr>

From: Fabien Coelho <coelho@cri.ensmp.fr>
To: Tom Lane <tgl@sss.pgh.pa.us>, Corey Huinker <corey.huinker@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-04-16T07:40:52Z
Lists: pgsql-hackers

Attachments

Hello,

Here is a rebased and updated version of adding \gi:

- improved documentation
- some refactoring to share one function
- signal trap disabled on \gi as well

The thread subject is now a misnomer, I'm not sure whether I should 
update it or start a new thread.

On 05/04/2025 22:14, Fabien Coelho wrote:
> Hello Tom and Corey,
>
>> [...] Anyway, my feeling about it is that \copy parsing is a huge hack
>> right now, and I'd rather see it become less of a hack, that is
>> more like other psql commands, instead of getting even hackier.
>
> After giving it some thoughts, I concluded that trying to salvage 
> \copy is not the
> way to go and I have followed Corey's suggestion to extend the 
> standard SQL COPY
> handling by providing an alternate input stream with "\gi file" or 
> "\gi cmd|".
>
> This has lead to significant restructuring so as to simplify \copy 
> handling to use
> the \g and \gi existing infrastructure. I've moved checked performed 
> only for \copy
> so that they are now also done with \g, and error messages are more 
> systematically
> shown. The pipe char used to mark a command instead of a file is 
> switched to a
> boolean, which is more consistent with other places and how it can be 
> managed with
> "\gi command|" as the pipe char is at the end instead of the start. 
> The patch also
> includes tests and some doc.
>
> If this is accepted, ISTM that \copy could be retired and even removed 
> at a
> later stage, which would solve elegantly its debatable implementation.
>
-- 
Fabien.

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix psql's "\g target" meta-command to work with COPY TO STDOUT.