Обсуждение: Problem with binary data transfer format of TEXT in 8.4

Поиск
Список
Период
Сортировка

Problem with binary data transfer format of TEXT in 8.4

От
Gracjan Polak
Дата:
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