다음과 같은 간단한 코드로 일부 정수를 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 캐스트에서 결정할 수 있어야합니다. 또한 엔디안을 뒤집는 것은 오류를 제거 할뿐만 아니라 실제로 올바른 삽입을 초래하기 때문에 확실히 엔디안 문제입니다. – Edward
아, 알겠습니다. 나는 그것을 생각해야했다 :) –