Hi all, (Please redirect me to correct place if there is one).
I'm trying to implement proper binary data transfer in Database.HDBC.PostgreSQL Haskell library. This library is a wrapper around libpq. I sorted out how to use paramFormats[] param of PQexecParams. I sorted out how to retrieve and properly unescape binary data when received with PQunescapeBytea. Due to architecture of wrapper library I'm unable to make a difference between strings and binary data. It is all ByteString all over the place. CREATE TABLE test( str TEXT, bytes BYTEA ); Works: INSERT INTO test(bytes) VALUES (?) with ["anything"] SELECT bytes FROM test returns ["anything"] correctly Does not work: INSERT INTO test(str) VALUES (?) with ["anything"] sometimes fails with: user error (SQL error: SqlError {seState = "08P01", seNativeError = 7, seErrorMsg = "execute: PGRES_FATAL_ERROR: ERROR: insufficient data left in message\n"}) So it seems to me that putting string into database with binary format requires something more than just encoding it as UTF8 and stating its length in paramLengths[]. So the question is: How do I transfer strings in binary format? Note: I do not need binary format of anything else but UTF-8 encoded TEXT. Note 2: I leave paramTypes[] as NULL. Versions: PostgreSQL 8.4 MacOSX 10.6 postgresql, bound to client: 8.4.9 Proxied driver: postgresql, bound to version: 3 Connected to server version: 80409 -- Gracjan