Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy - Mailing list pgsql-hackers

From Etsuro Fujita
Subject Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy
Date
Msg-id 004201ce0f61$1e57adb0$5b070910$@lab.ntt.co.jp
Whole thread Raw
In response to Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy  (Amit Kapila <amit.kapila@huawei.com>)
Responses Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy
List pgsql-hackers
Hi Amit,

Thank you for the review.

> From: Amit Kapila [mailto:amit.kapila@huawei.com]

> >> Test case issues:
> >> ------------------
> >> 1. "Broken pipe" is not handled in case of psql "\copy" command;
> >>     Issue are as follows:
> >>         Following are verified on SuSE-Linux 10.2.
> >>         1) psql is exiting when "\COPY xxx TO" command is issued and
> command/script is not found
> >>                 When popen is called in write mode it is creating valid
> file descriptor and when it tries to write to file "Broken pipe" error is >
> coming which is not handled.
> >>                         psql# \copy pgbench_accounts TO PROGRAM
> '../compress.sh pgbench_accounts4.txt'
> >>         2) When "\copy" command is in progress then program/command is
> killed/"crashed due to any problem"
> >>            psql is exiting.
>
> >This is a headache.  I have no idea how to solve this.
>
> I think we can keep it for committer to take a call on this issue.

Agreed.

> I have found few more minor issues as below:
>
> 1. The comment above do_copy can be modified to address the new
> functionality it can handle.
> /*
>  * Execute a \copy command (frontend copy). We have to open a file, then
>  * submit a COPY query to the backend and either feed it data from the
>  * file or route its response into the file.
>  */
> bool
> do_copy(const char *args)

Done.

> 2.
> @@ -256,8 +273,14 @@ do_copy(const char *args)
> +        if (options->file == NULL && options->program)
> +        {
> +                psql_error("program is not supported to stdout/pstdout or
> from stdin/pstdin\n");
> +                return false;
> +        }
>
> should call free_copy_options(options); before return false;

Good catch!  Done.

> 3. \copy command doesn't need semicolon at end, however it was working
> previous to your patch, but
>    now it is giving error.
> postgres=# \copy t1 from 'e:\pg_git_code\Data\t1_Data.txt';
> e:/pg_git_code/Data/t1_Data.txt';: No such file or directory
> e:/pg_git_code/Data/t1_Data.txt';: No such file or directory

Sorry, I've fixed the bug.

> 4. Please check if OpenPipeStream() it needs to call
>    if (ReleaseLruFile()),

OpenPipeStream() calls ReleaseLruFile() by itself if necessary.

> 5. Following in copy.sgml can be changed to make more meaningful as the
> first line looks little adhoc.
> +     <para>
> +      The command that input comes from or that output goes to.
> +      The command for COPY FROM, which input comes from, must write its
> output
> +      to standard output.  The command for COPY TO, which output goes to,
> must
> +      read its input from standard input.
> +     </para>

I've struggled to make the document more meaningful.

> 6. Can we have one example of this new syntax, it can make it more
> meaningful.

Done.

Sorry for the long delay.

Best regards,
Etsuro Fujita

> With Regards,
> Amit Kapila.
>
>


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Materialized views WIP patch
Next
From: Alexander Law
Date:
Subject: Re: BUG #7493: Postmaster messages unreadable in a Windows console