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@xxxxxxxxxxx