Re: 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: pgsql-general(at)postgresql(dot)org
Subject: Re: Re: copy to/from stdout using libpgtcl
Date: 2001-08-12 02:06:57
Message-ID: 200108120206.f7C26v119923@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-patches


Is this safe to put into the main code? It looks fine.

> 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

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2001-08-12 03:02:37 Re: Re: copy to/from stdout using libpgtcl
Previous Message ljb 2001-08-12 00:47:33 Re: copy to/from stdout using libpgtcl

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2001-08-12 02:47:14 Re: Re: [PATCHES] Select parser at runtime
Previous Message Joe Conway 2001-08-12 01:58:40 Re: bytea_ops