繁体   English   中英

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

[英]Retrieving image file from Postgresql database returns two times bigger data inserted (by libpq library)

我正在使用 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 字节)。 获取数据时,数据会变大两倍......

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM