Ich versuche einige Integer in eine Postgres-Tabelle mit dem folgenden etwas einfachen Code einzufügen.PostgreSQL libpq "Integer out of range" -Fehler beim Senden von Integer als binär
#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;
}
ich folgende Ergebnisse:
Number:55 ERROR: integer out of range
Number:1 ERROR: integer out of range
Ich bin mir ziemlich sicher, dass ein int64_t wird in einer 8-Byte-Ganzzahl auf jeder vernünftige Plattform immer fit. Was mache ich falsch?
Es soll in der Lage sein, das aus der :: int8 Besetzung zu bestimmen. Außerdem ist es definitiv ein Endian-Problem, da das Umdrehen des Endian nicht nur den Fehler beseitigt, sondern tatsächlich zu korrekten Einfügungen führt. – Edward
Ah, ich verstehe. Ich hätte daran denken sollen :) –