いくつかの整数を次のやや単純なコードで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
ああ、そうだ。私はそれを考えていたはずです:) –