如何以有效的方式通过 PQgetvalue 获取双精度(或字节)数据?

How can I get double(or bytes) data through PQgetvalue in an efficient way?

我创建了一个包含 3 列的 table:int8doublebytea。当查询一行数据时,我使用 PQgetvalue 来获取一行中的每一列值。但是 PQgetvalue return 一个 char*,我必须将文本值转换为相应的类型,如 atoi 或 strtod 等。

有没有更高效的获取实际数据的方法,避免每次都转换数据?

鉴于这些功能:

PQgetvalue:

char *PQgetvalue(const PGresult *res,
                 int row_number,
                 int column_number);

memcpy:

#include <string.h>
void *memcpy(void *restrict dest, const void *restrict src, size_t n);

你像这样提取一个double

double dest;

memcpy(&dest, PQgetvalue(...), sizeof dest);

char * 转换为数字的开销并不大。但是您可以通过将 1 作为最后一个参数调用 PQexecParams 来使用二进制模式。

要检索二进制数据,您必须使用 PQgetlengthPQgetisnull 来获取数据的大小和 NULLness。此外,数据将采用数据库服务器使用的二进制格式,因此如果两台机器具有不同的硬件架构(尽管几乎所有地方都使用 IEEE),double 的表示可能会不同。