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-05T20:14:39Z
Lists: pgsql-hackers

Attachments

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.