我正在使用libpq与PostgreSQL DB交互。我得到下面的错误,而试图更新表。
错误:消息中留下的数据不足
我已经创建了一个相同的参数的示例代码,它也给我同样的错误下面是示例代码
std::string sQuery("update client_backlog_period set starttime = $1, endtime = $2, unavailable = $3 where periodid = $4");
int nElem = 4;
timestamp start_time = 736260060000000, end_time = 736260900000000;
short nUnavailable = 0;
long nPeriodid = 1;
start_time = boost::endian::native_to_big(start_time);
end_time = boost::endian::native_to_big(end_time);
nUnavailable = boost::endian::native_to_big(nUnavailable);
nPeriodid = boost::endian::native_to_big(nPeriodid);
const char* paramValues[4] = { (char*)&start_time, (char*)&end_time, (char*)&nUnavailable, (char*)&nPeriodid};
Oid paramTypes[4] = { TIMESTAMPOID, TIMESTAMPOID, INT2OID , INT8OID };
int paramLengths[4] = { sizeof(start_time), sizeof(end_time),sizeof(nUnavailable), sizeof(nPeriodid) };
int paramFormats[4] = { 1,1,1,1 };
PGresult* res = PQexecParams(db.m_pPGConn,
sQuery.c_str(),
nElem,
paramTypes,
paramValues,
paramLengths,
paramFormats,
1
);
ExecStatusType status = PQresultStatus(res);
if (status != PGRES_COMMAND_OK)
{
std::cerr << "\n Update Query failed, Error: " << PQerrorMessage(res) << ",status: " << status << std::endl;
PQclear(res);
}
PQerrorMessage(res)正在返回错误:消息中剩余的数据不足
状态为PGRES_FATAL_ERROR
插入和选择stmt工作正常。
1条答案
按热度按时间epggiuax1#
这可能归结为几件事(在下面的文章中引用),我将在这里总结它们。
1.尝试更新的值与表中为这些列定义的数据类型(starttime、endtime或不可用)之间的数据类型不匹配
1.您的数据中包含空字符
"\0"
1.一个与数据库编码有关的问题,更改为UTF-8,这可以工作。
Postgres: org.postgresql.util.PSQLException: ERROR: insufficient data left in message