从Postgresql数据库中检索图像文件会返回两倍大的数据(通过libpq库)

时间:2013-03-16 11:19:16

标签: c postgresql libpq bytea

我正在使用Postgresql数据库的libpq库,我遇到了从db检索bytea数据的问题。我无法解决我的问题,所以想问你。每当我尝试将图像文件插入db并将其取回时,返回数据的大小始终是我发送的数据的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字节)。获得它时,数据会变大两倍......

1 个答案:

答案 0 :(得分:2)

好的,使用“PQexec”命令进行的查询以文本格式返回值,并且没有参数告诉您希望以文本格式或字节显示结果。我不确定是否存在更好和更合适的命令来查询它,但我使用“PQexecParams”并设置返回类型1(1表示字节,0表示文本),它返回具有预期大小的确切数据。无论如何,谢谢。