Thread: ECPG and COPY TO STDOUT

ECPG and COPY TO STDOUT

From
Edmund Bacon
Date:
If I use COPY TO STDOUT in an ECPG program, where does the output go?

If I use COPY TO '/tmp/foo', I get the file created, with the data in
it, but trying COPY TO STDOUT produces no output.

What I'm trying to do is to dump a table's data, and have the resulting
file owned by the application user rather than the dba user.

I would rather to not have to create the file in /tmp, copy contents, rm
/tmp file, if I don't have to.



This is the program I'm using:


#include <stdio.h>

EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR sqlprint;

int main()
{
   EXEC SQL BEGIN DECLARE SECTION;   char *fname = "/tmp/foo";   EXEC SQL END DECLARE SECTION;
   EXEC SQL CONNECT TO test;
   /* produces expected file "/tmp/foo" */   EXEC SQL COPY foo TO :fname WITH DELIMITER ',';   printf("copy to /tmp/foo
:sqlca.sqlcode = %ld", sqlca.sqlcode);
 
   /* goes nowhere (?) */   EXEC SQL COPY foo TO STDOUT WITH DELIMITER ',';   printf("copy to STDOUT : sqlca.sqlcode =
%ld\n",sqlca.sqlcode);
 
   EXEC SQL DISCONNECT;
   return 0;
}



-- 
Edmund Bacon <ebacon@onesystem.com>



Re: ECPG and COPY TO STDOUT

From
Michael Meskes
Date:
On Thu, Apr 01, 2004 at 12:22:44PM -0700, Edmund Bacon wrote:
> If I use COPY TO STDOUT in an ECPG program, where does the output go?

Nowhere, it's discarded.

> What I'm trying to do is to dump a table's data, and have the resulting
> file owned by the application user rather than the dba user.

ecpg gets PGRES_COPY_OUT as a result from the execution and just calls
PQendcopy() without reading the data. The same happens btw with
PGRES_COPY_IN. It's working like this since the get-go in the sources I
inherited from Linux Tolke. I guess we could add this to the todo list
as a feature request.

Patches are welcome of course. :-)

Michael
-- 
Michael Meskes
Email: Michael at Fam-Meskes dot De
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!