我試圖插入一些整數到Postgres表中使用以下幾個簡單的代碼。PostgreSQL libpq發送整數作爲二進制時出現「整數超出範圍」錯誤
#include <libpq-fe.h>
#include <stdio.h>
#include <stdint.h>
int main() {
int64_t i = 0;
PGconn * connection = PQconnectdb("dbname='babyfood'");
if(!connection || PQstatus(connection) != CONNECTION_OK)
return 1;
printf("Number: ");
scanf("%d", &i);
char * params[1];
int param_lengths[1];
int param_formats[1];
param_lengths[0] = sizeof(i);
param_formats[0] = 1;
params[0] = (char*)&i;
PGresult * res = PQexecParams(connection,
"INSERT INTO intlist VALUES ($1::int8)",
1,
NULL,
params,
param_lengths,
param_formats,
0);
printf("%s\n", PQresultErrorMessage(res));
PQclear(res);
PQfinish(connection);
return 0;
}
我得到如下結果:
Number:55 ERROR: integer out of range
Number:1 ERROR: integer out of range
我敢肯定的int64_t總會適合在任何理智的平臺的8字節整數。我究竟做錯了什麼?
它應該能夠從:: int8轉換中確定。此外,這絕對是一個endian問題,因爲翻轉endian不僅會擺脫錯誤,而且實際上會導致正確的插入。 – Edward 2009-08-19 21:01:44
啊,我明白了。我應該想到這一點:) – 2009-08-20 08:38:02