From: | Amit Khandekar <amit(dot)khandekar(at)enterprisedb(dot)com> |
---|---|
To: | Rajeev rastogi <rajeev(dot)rastogi(at)huawei(dot)com> |
Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: COPY table FROM STDIN doesn't show count tag |
Date: | 2013-11-26 13:29:24 |
Message-ID: | CACoZds3g-o4ZFgUEdugWYRtsX79EvsCQscr9j8-Vp=ANgEdiWQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 25 November 2013 15:25, Rajeev rastogi <rajeev(dot)rastogi(at)huawei(dot)com> wrote:
> OK. I have revised the patch as per the discussion.
>
Could you please submit only the \COPY fix first ? The attached patch also
contains the fix for the original COPY status fix.
Now if \copy command is called then, we are setting the appropriate value
> of _psqlSettings->copystream in do_copy and same is being used inside
> handleCopyIn() and handleCopyOut(). Once the \copy command execution
> finishes, we are resetting the value of _psqlSettings->copystream to NULL.
> And if COPY(No slash) command is used, then in that case
> _psqlSettings->copystream will be NULL. So based on this value being NULL,
> copyStream will be assigned as stdout/stdin depending on TO/FROM
> respectively inside the function handleCopyOut()/handleCopyIn().
>
> Also in order to address the queries like
>
*./psql -d postgres -c "\copy tbl to
> '/home/rajeev/9.4gitcode/install/bin/data/temp.txt'; copy tbl from stdin;"*
>
> Inside the function ProcessResult, we check that if it is the second cycle
> and result status is COPY OUT or IN, then we reset the value of
> _psqlSettings->copystream to NULL, so that it can take the value as
> stdout/stdin for further processing.
>
>
>
Yes, that's right, the second cycle should not use pset.copyStream.
handleCopyOut(PGconn *conn, FILE *copystream, PGresult **res)
{
bool OK = true;
char *buf;
int ret;
- PGresult *res;
+
+ if (!copystream)
+ copystream = stdout;
It should use pset.queryFout if it's NULL. Same in hadleCopyIn().
Otherwise, the result of the following command goes to stdout, when it
should go to the output file :
psql -d postgres -o /tmp/p.out -c "copy tab to stdout"
+ /*
+ * If this is second copy; then it will be
definately not \copy,
+ * and also it can not be from any user
given file.
+ * So reset the value of copystream to
NULL, so that read/wrie
+ * happens from stdin/stdout.
+ */
+ if (!first_cycle)
+ pset.copyStream = NULL;
Let ProcessResult() not change pset.copyStream. Let only do_copy() update
it. Instead of the above location, I suggest, just before calling
handleCopyOut/In(), we decide what to pass them as their copyStream
parameter depending upon whether it is first cycle or not.
> Please provide your opinion.
>
>
>
> Thanks and Regards,
>
> Kumar Rajeev Rastogi
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Alexander Korotkov | 2013-11-26 13:34:12 | Re: GIN improvements part 1: additional information |
Previous Message | Haribabu kommi | 2013-11-26 13:27:08 | Re: Regress tests to improve the function coverage of schemacmds and user and tablespace files |