On Wed, 4 Mar 2026 at 15:27, Nitin Motiani <[email protected]> wrote:
>
> Rebased and added some extra logs for testing.
>
> Thanks
Thanks Nitin for the updated patch.
+1 for this idea.
Here are my few review comments.
*Comment1*:
02 is not applying so this should be rebased.
fix:
if (!no_globals)
n_errors = restore_global_objects(global_path,
tmpopts, filespec_is_pipe);
*Comment2*:
03 patch has test cases. Please change these error messages as per other
errors in code.
+command_fails_like(
+ [ 'pg_dump', '-Fd', '--pipe-command="cat"', '--compress=lz4',
'test'],
+ qr/\Qpg_dump: hint: Option --pipe-command is not supported with any
compression type\E/,
+ 'pg_dump: hint: Option --pipe-command is not supported with any
compression type'
+);
Above should be:
+command_fails_like(
+ [ 'pg_dump', '-Fd', '--pipe-command="cat"', '--compress=lz4',
'test'],
+ qr/\Qpg_dump: error: option --pipe-command is not supported with
any compression type\E/,
+ 'pg_dump option --pipe-command is not supported with any
compression type'
+);
*Comment3*:
Please can we rename "--pipe-command" to "--pipe" only.
*Commen4*: --pipe or --pipe-command should be added into the usage function
in pg_dump.c and pg_restore.c files.
*Comment5*: I think we can support this new pipe option with pg_dumpall
also as we support directory mode in pg_dumpall from v19.
*Comment6:*
> mst@localhost:~/pg60/postgres/inst/bin$ ./pg_dump -Fd --pipe-command="a"
> -d postgres
> sh: line 1: a: command not found
> pg_dump: error: could not close file: Success
> pg_dump: error: could not close TOC file: Success
> mst@localhost:~/pg60/postgres/inst/bin$
we should add more processing for the "--pipe-command" argument so that we
don't get the above error. I think we should validate the path.
*Comment7*: + bool path_is_pipe_command)
I think we can rename to is_pipe, similarly filespec_is_pipe ->
is_pipe, fSpecIsPipe->is_pipe
*Comment8*:
> + This option is only supported with the directory output
> + format. It can be used to write to multiple streams which
> + otherwise would not be possible with the directory mode.
> + For each stream, it starts a process which runs the
> + specified command and pipes the pg_dump output to this
> + process.
> + This option is not valid if <option>--file</option>
> + is also specified.
> + </para>
> + <para>
> + The pipe-command can be used to perform operations like compress
> + using a custom algorithm, filter, or write the output to a cloud
> + storage etc. The user would need a way to pipe the final output of
> + each stream to a file. To handle that, the pipe command supports
> a format
> + specifier %f. And all the instances of %f in the command string
> + will be replaced with the corresponding file name which
> + would have been used in the directory mode with
> <option>--file</option>.
> + See <xref linkend="pg-dump-examples"/> below.
> + </para>
> + </listitem>
> + </varlistentry>
>
please use 80 chars in all lines.
*Comment9*:
mst@localhost:~/pg60/postgres/inst/bin$ ./pg_restore dumpdir
--pipe-command="cat"
pg_restore: hint: Only one of [filespec, --pipe-command] allowed
Above error should be similar to the other errors in pg_restore.
*Comment10*:
mst@localhost:~/pg60/postgres/inst/bin$ ./pg_restore --pipe-command="cat"
-d postgres --format=tar
pg_restore: error: could not open TOC file "cat" for input: No such file or
directory
mst@localhost:~/pg60/postgres/inst/bin$
we should add an error for non-directory format. If no format is specified,
then we can continue or for unknown format also we can report an error.
I will do some more review and testing.
--
Thanks and Regards
Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com