TCL with large objects on Win - Mailing list pgsql-interfaces

From Andreas Kretzer
Subject TCL with large objects on Win
Date
Msg-id 3C0B4F92.530A3DA6@kretzer-berlin.de
Whole thread Raw
Responses Re: TCL with large objects on Win  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-interfaces
<tt>Hi everybody,</tt><tt></tt><p><tt>I'm using postgres 7.1.2 with Tcl/Tk (8.3) interface on</tt><br /><tt>Windows
(thedatabase is running on Linux, only the</tt><br /><tt>clients are on Windows).</tt><tt></tt><p><tt>When using the
pg_lo_importor pg_lo_export functions,</tt><br /><tt>everything is ok under Linux (where I develop and test</tt><br
/><tt>theapplication). When I started to make a test under</tt><br /><tt>MS I recognized, that all this stuff is
broken!It won't</tt><br /><tt>import nor export binary data (while a fist test with some</tt><br /><tt>pure text and
RTFfiles worked ok). So this all is related</tt><br /><tt>to the binary stuff (CR/LF and EOF chars I
think).</tt><tt></tt><p><tt>SoI changed the scripts to use the pg_lo_create, pg_lo_open,</tt><br /><tt>pg_lo_write /
pg_lo_readand pg_lo_close together with a</tt><br /><tt>filedescriptor of the Tcl/Tk switched to binary mode:</tt><br
/><tt>   fconfigure $fd -translation binary</tt><tt></tt><p><tt>This seems to be a solution for importing the objects
(at</tt><br/><tt>least they have the correct size when I export them on the</tt><br /><tt>Linux machine), but
unfourtunatelyit doesn't work on export!</tt><br /><tt>The first problem is to find the source of this trouble -
it</tt><br/><tt>could be a Tcl/Tk problem!</tt><tt></tt><p><tt>When reading from the large object with</tt><br
/><tt>   pg_lo_read $conn $lofd buf 4096</tt><br /><tt>if returns the amount of read bytes (lets say we are at
the</tt><br/><tt>beginning of a large file, so it really reads the 4k bytes).</tt><br /><tt>When I test the length of
thestring, it will be a lot</tt><br /><tt>shorter (varies, most time it is about half the size I expected</tt><br
/><tt>itto be). Of course this leads to a corrupt file after</tt><br /><tt>complete export.</tt><tt></tt><p><tt>I also
havereduced the read size to 1 byte! In this case, the</tt><br /><tt>string length function returns often (or always
???)3!!!!</tt><tt></tt><p><tt>Because the import runs cleanly with the same data (read from</tt><br /><tt>file, written
tothe large object) I am in doubt that it really</tt><br /><tt>is a Tcl/Tk concern.</tt><tt></tt><p><tt>N.B.: While
tryingto find the reason for my trouble getting this</tt><br /><tt>all to work (blame on me: I frogot to put this all
insidea</tt><br /><tt>transaction block) I found an implemention fault in</tt><tt></tt><p><tt>   
src/interfaces/libpgtcl/pgtclCmds.c</tt><tt></tt><p><tt>Thesecond letter of the mode in Pg_lo_open() ANDs its
binary</tt><br/><tt>value to the one in the case-statement for the first letter.</tt><br /><tt>This should obviously be
anORing function like</tt><tt></tt><p><tt>    mode |= INV_READ;</tt><br /><tt>or</tt><br /><tt>    mode |=
INV_WRITE;</tt><tt></tt><p><tt>respectively.I already posted a mail about this to</tt><br
/><tt>pgsql-bugs@postgresql.orgbut maybe some of the developers</tt><br /><tt>read this here before processing the
bug-reports:-)</tt><br /><tt>Unfortunately, this has nothing to do with my problem.</tt><tt></tt><p><tt>Hope that
someonecan help me. I can't compile the windows</tt><br /><tt>DLLs (got no Microsoft compiler and don't want to use
the</tt><br/><tt>cygnus stuff). Is there a chance to compile the DLLs with</tt><br /><tt>GNU
C?</tt><tt></tt><p><tt>Bestregards</tt><br /><tt>Andreas</tt> 

pgsql-interfaces by date:

Previous
From: Tom Lane
Date:
Subject: Re: LISTEN & transactions
Next
From: Tom Lane
Date:
Subject: Re: TCL with large objects on Win