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