我正在尝试使用以下一些简单的代码将一些整数插入到 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 字节整数。我究竟做错了什么?