postgresql libpq错误:消息中剩余的数据不足

kulphzqa  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(1021)

我正在使用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工作正常。

epggiuax

epggiuax1#

这可能归结为几件事(在下面的文章中引用),我将在这里总结它们。
1.尝试更新的值与表中为这些列定义的数据类型(starttime、endtime或不可用)之间的数据类型不匹配
1.您的数据中包含空字符"\0"
1.一个与数据库编码有关的问题,更改为UTF-8,这可以工作。
Postgres: org.postgresql.util.PSQLException: ERROR: insufficient data left in message

相关问题