PostgreSQL 9.4.4 文档 | |||
---|---|---|---|
上一页 | 上一级 | 章 31. libpq - C 库 | 下一页 |
通常,libpq收集SQL命令的全部结果并作为单个PGresult
返回到应用中。这对于返回大量行的命令是不可能实现的。对于这种情况,
应用可以在单行模式中使用PQsendQuery
和PQgetResult
。
在这个模式中,结果行一次返回一行到应用中,就像从服务器中接收到它们一样。
要进入单行模式,在成功调用PQsendQuery
(或者一个兄弟函数)
之后立即调用PQsetSingleRowMode
。这种模式选择只对当前执行的查询有效。
然后重复的调用PQgetResult
,直到它返回空,在第 31.4 节
中记录。如果查询返回任意行,它们作为独立的PGresult对象返回,
就像普通的查询结果,除了状态码是PGRES_SINGLE_TUPLE而不是
PGRES_TUPLES_OK。在最后一行之后,或者一旦查询返回零行,
返回一个带有状态PGRES_TUPLES_OK的零行对象;
这是没有更多行的一个信号。(但是,请注意,仍然需要继续调用PQgetResult
直到它返回空。)所有这些PGresult对象将包含相同的描述数据
(字段名、类型等),就像该查询的一个普通PGresult对象拥有的那样。
像往常一样,每个对象都应该使用PQclear
释放。
小心 |
处理一个查询时,服务器可能返回一些行然后遇到一个错误,导致查询退出。通常, libpq丢弃任何这样的行并且只报告错误。但是在单行模式中, 这些行将早已返回到应用中。因此,应用将看到一些 PGRES_SINGLE_TUPLE PGresult 对象跟随在PGRES_FATAL_ERROR对象后面。对于适当的事务行为, 如果查询最终失败了,那么应用必须设计为抛弃或撤销先前处理的行。 |