Я пытаюсь вставить несколько чисел в таблицу 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;
}
Я получаю следующие результаты:
<b>Number: </b>55
<b>ERROR: integer out of range</b>
<b>Number: </b>1
<b>ERROR: integer out of range</b>
Я почти уверен, что int64_t всегда будет соответствовать 8-байтовому целому числу на любой разумной платформе Что я делаю не так?