Извлечение файла изображения из базы данных Postgresql возвращает в два раза больше вставленных данных (библиотекой libpq)

Я использую библиотеку libpq базы данных Postgresql, и у меня возникла проблема с получением данных bytea из базы данных. Я не мог решить свою проблему, поэтому хотел спросить вас. Всякий раз, когда я пытаюсь вставить файл изображения в БД и получить его обратно, размер возвращаемых данных всегда в 2 раза больше данных, которые я отправил. На самом деле точное уравнение: полученные данные = отправленные данные * 2 + 2 (в байтах). Так что я еще не мог понять, я, вероятно, что-то упускаю :/

Пример кода, который я использую, выглядит следующим образом:

PGresult*    res;
const char*  paramValues[1] = {plateImageArray.data()}; // data type is const char*
int          paramLengths[1] = {plateImageArray.size()}; // size of image is 58573 bytes
int          paramFormats[1] = {1}; // 1 for byte, 0 for text

res = PQexecParams(conn,
        "INSERT INTO \"plates\" (plateImage) VALUES ($1::bytea)",
        1,               /* param number */
        NULL,            /* param type */
        paramValues,     /* param values*/
        paramLengths,    /* param lengths */
        paramFormats,    /* default to all text params */
        1);              /* return type, 1 for text. */

res = PQexec(conn,"Select * from \"plate_images\" WHERE ...."); /*returns 1 tuple : something / something / image(bytea) */

int lengthOfPlateImage=PQgetlength(res,0,2); // indicates 117148 bytes, exactly 2 times of sent data +2 

Я ценю, если вы, ребята, поможете мне. Мне смертельно надоело искать причину этого.

Заранее спасибо.

Изменить: я отследил данные, хранящиеся на диске, и размер вставленных данных такой же (58573 байта). В два раза больше данных становится при их получении...


person Horizon1710    schedule 16.03.2013    source источник


Ответы (1)


Хорошо, запрос, сделанный с помощью команды PQexec, возвращает значение в текстовом формате, и у него нет параметра, чтобы указать, хотите ли вы результат в текстовом формате или в байтах. Я не уверен, существует ли лучшая и более подходящая команда для запроса, но я использовал PQexecParams и установил тип возврата 1 (1 для байта, 0 для текста), и он вернул точные данные с ожидаемым размером. Спасибо в любом случае.

person Horizon1710    schedule 16.03.2013