次のやや単純なコードを使用して、Postgresテーブルにいくつかの整数を挿入しようとしています。
#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;
}
次の結果が得られます。
数値: 55 エラー:整数が範囲外です
数値: 1 エラー:整数が範囲外です
int64_tは、どのプラットフォームでも常に8バイト整数に収まると確信しています。私は何が間違っているのですか?