Skip site navigation (1) Skip section navigation (2)

Re: [GENERAL] Re: copy to/from stdout using libpgtcl

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: ljb <lbayuk(at)mindspring(dot)com>
Cc: PostgreSQL-patches <pgsql-patches(at)postgresql(dot)org>
Subject: Re: [GENERAL] Re: copy to/from stdout using libpgtcl
Date: 2001-09-07 21:55:10
Message-ID: 200109072155.f87LtAD00486@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-generalpgsql-patches
Patch applied.  Thanks.

> g(dot)hintermayer(at)inode(dot)at wrote:
> >has anyone ever successfully done copy to/from stdout with the
> >tcl-extension for postgreSQL.
> >I'm currently using 7.0 and always getting a seg fault when I try to
> >read from the database connection after issueing a "COPY table TO
> >stdout;" (I'm using the connection handle, *not* the result handle).
> >Maybe this is fixed in a later release.
> >The README file in src/interfaces/libpgtcl tells me, that this should
> >work, but unforunately it doesn't.
> 
> Yes, it seems broken. It is a bug in libpgtcl.  Are you running Tcl >= 8.3.2?
> That's when the Tcl team changed the data structure for channel
> callbacks.  The change itself was designed to be backward compatible, but I
> suspect a related change made the code more sensitive to errors in the
> structure (NULL pointers where functions are required).  Either that, or
> nobody has tried to use libpgtcl with COPY in a long time.
> 
> First, I have to say I can't think of a good reason to use PostgreSQL's
> COPY command from a Tcl application. I think it should only be used with
> psql for importing data from another source into PostgreSQL, or for
> exporting PostgreSQL data into another database (but why would anyone do
> that?) If it was me, I would stick with SELECT and INSERT and be "SQL
> Compliant".
> 
> OK, editorial is over. Try applying the patch below to fix
>       src/interfaces/libpgtcl/pgtclId.c
> and let us know if it works. I did little testing on it, but my test did
> segfault before and ran fine (copy in and copy out) after the patch.  This
> is for PostgreSQL-7.1.2 - since you are running older 7.0, I don't know if
> this will work, but I suspect it will.
> 
> PS It's the absence of PgWatchProc which kills it. I didn't upgrade it
> to the "V2" channel type structure, so it should be compatible with older
> Tcl's. But aside from gets and puts, I doubt any other file operations
> would work on the handle during a copy.
> ========================================================================
> 
> --- src/interfaces/libpgtcl/pgtclId.c.orig	Fri Feb  9 21:31:29 2001
> +++ src/interfaces/libpgtcl/pgtclId.c	Sat Aug 11 16:55:14 2001
> @@ -138,17 +138,32 @@
>  
>  #endif
>  
> +/*
> + * The WatchProc and GetHandleProc are no-ops but must be present.
> + */
> +static void
> +PgWatchProc(ClientData instanceData, int mask)
> +{
> +}
> +static int
> +PgGetHandleProc(ClientData instanceData, int direction,
> +	ClientData *handlePtr)
> +{
> +	return TCL_ERROR;
> +}
> +
>  Tcl_ChannelType Pg_ConnType = {
>  	"pgsql",					/* channel type */
>  	NULL,						/* blockmodeproc */
>  	PgDelConnectionId,			/* closeproc */
>  	PgInputProc,				/* inputproc */
>  	PgOutputProc,				/* outputproc */
> -
> -	/*
> -	 * Note the additional stuff can be left NULL, or is initialized
> -	 * during a PgSetConnectionId
> -	 */
> +	NULL,						/* SeekProc, Not used */
> +	NULL,						/* SetOptionProc, Not used */
> +	NULL,						/* GetOptionProc, Not used */
> +	PgWatchProc,				/* WatchProc, must be defined */
> +	PgGetHandleProc,			/* GetHandleProc, must be defined */
> +	NULL 						/* Close2Proc, Not used */
>  };
>  
>  /*
> ========================================================================
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
> http://www.postgresql.org/search.mpl
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

In response to

pgsql-patches by date

Next:From: Bruce MomjianDate: 2001-09-07 21:56:37
Subject: Re: ECPG enhancements / fixes
Previous:From: Bruce MomjianDate: 2001-09-07 21:42:14
Subject: Re: Fix for 2 test cases of JDBC test suite

pgsql-general by date

Next:From: Tom LaneDate: 2001-09-07 21:58:50
Subject: Re: Problem w/ dumping huge table and no disk space
Previous:From: Andrew GouldDate: 2001-09-07 21:52:10
Subject: Re: Problem w/ dumping huge table and no disk space

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group