On 1/12/24 11:34, David Ventimiglia wrote:
> Hello! How do I redirect logical decoding output from the PostgreSQL CLI
> tool |pg_recvlogical| either to a file or to another command via a pipe?
> I ask because when I try the obvious, no output is recorded or sent:
>
> |pg_recvlogical -d postgres --slot test --start -f - >> sample.jsonl |
>
> Lest there be any confusion, I already created the slot in an earlier
> step. Moreover, I can verify that if I omit the output redirection |>>
> sample| then it does work, insofar as it emits the expected change
> events when I perform DML in another terminal window. When I include the
> redirection (or alternatively, set up a pipeline), then nothing happens.
You left out the important part of the SO question:
pg_recvlogical -d postgres --slot test --create-slot -P wal2json
I can get:
pg_recvlogical -d postgres --slot test --start -f - >> sample.jsonl
to work when I do:
pg_recvlogical -d postgres --slot test --create-slot
wal2json seems to be the issue.
>
> Note that I am aware of the option to pass a filename to the -f switch
> to write to a file. That works, but it's not what I'm after because it
> doesn't help update my mental model of how this is supposed to work.
> Based on my current (flawed) mental model built up from command line
> experience with other tools, this /should/ work. I should be able to
> send the output to stdout and then redirect it to a file. It surprises
> me that I cannot.
>
> Anyway, thanks!
>
> Best,
>
> David
>
--
Adrian Klaver
adrian.klaver@aklaver.com