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

From Amit Kapila
Subject Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy
Date
Msg-id 003801ce10e5$e175c4f0$a4614ed0$@kapila@huawei.com
Whole thread Raw
In response to Re: Review : Add hooks for pre- and post-processor executables for COPY and \copy  ("Etsuro Fujita" <fujita.etsuro@lab.ntt.co.jp>)
List pgsql-hackers
On Wednesday, February 20, 2013 5:25 PM Etsuro Fujita wrote:
> Hi Amit,
>
> Thank you for the review.

Etsuro-san, you are welcome.
> > 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.

I have asked this thinking that ReleaseLruFile() may not be useful for
OpenPipeStream,
As I was not sure how the new file descriptors get allocated for popen.
But now again reading popen specs, I got the point that it can be useful.

> > 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.

To be honest, I am not sure whether introducing pre, post processor
terminology is right or not,
But again I shall let committer decide about this point.

> > 6. Can we have one example of this new syntax, it can make it more
> > meaningful.
>
> Done.
>
> Sorry for the long delay.

All the reported issues are handled in the new patch.

I have one small another doubt that in function parse_slash_copy, you
avoided expand tilde
for program case, which I am not sure is the right thing or not.


I am marking this patch as Ready For Committer.


Notes For Committer
-----------------------
1. "Broken pipe" is not handled in case of psql "\copy" command;  This is currently documented
2. Documentation needs to be checked, especially with focus whether
introducing pre, post processor terminology is  Okay.
3. In function parse_slash_copy, expand tilde is avaoided, is it okay?


With Regards,
Amit Kapila.




pgsql-hackers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: 9.2.3 crashes during archive recovery
Next
From: Heikki Linnakangas
Date:
Subject: Re: 9.2.3 crashes during archive recovery