PostgreSQL报错:row number 0 is out of range 0..-1

一、PostgreSQL的C 客户端中,若函数:GetResRow 获取的结果集为0,则其默认行为是:进程直接宕掉,同时 stderr ,向终端打错误码,提示: row number 0 is out of range 0…-1如下图所示: 通过gdb调试打印可以看到,其查询的结果集为0,同时段错误。google一番,似乎该Bug在PG的9.1~9.3中都存在这样的问题。

PostgreSQL报错:row number 0 is out of range 0..-1_第1张图片

二、其API代码如下:

int iType = HPR_Atoi32(pcDBPgsql->GetResRow(pResult, 0, 0));

这时候,如果返回的结果是0,则程序直接崩溃,其缺陷修复方式如下:

		char *pResType = NULL;
		int iType = 0;
		pResType = pcDBPgsql->GetResRow(pResult, 0, 0);
		if(NULL  == pResType )
		{
			//查询异常分支逻辑处理
		}
		else
		{
			//正常义务逻辑处理
			iType = HPR_Atoi32(pcDBPgsql->GetResRow(pResult, 0, 0));
		}

先对返回的结果集进行逻辑判断,若不为NULL,再进行正常的逻辑义务处理;反之则进行出错的逻辑分支判断。即使其结果集返回为0,进程也能够正常运行。不会宕掉。不过需要知道的是: row number 0 is out of range 0…-1错误码仍然会打印提示。如下图:
PostgreSQL报错:row number 0 is out of range 0..-1_第2张图片

你可能感兴趣的:(PostgreSQL)