Postgresql 中文操作指南
34.6. Retrieving Query Results Row-by-Row #
通常,libpq 收集 SQL 命令的整个结果,并将其作为单个 PGresult 返回到应用程序。这对于返回大量行的命令可能是不可行的。对于此类情况,应用程序可以在 single-row mode 中使用 PQsendQuery 和 PQgetResult 。在此模式中,结果行逐行返回到应用程序,就像从服务器收到它们一样。
要进入单行模式,请在成功调用 PQsendQuery (或同级函数)后立即调用 PQsetSingleRowMode 。此模式选择仅对当前正在执行的查询有效。然后重复调用 PQgetResult ,直到它返回 null,如 Section 34.4 中所述。如果查询返回任何行,则它们将作为各个 PGresult 对象返回,它们看起来像普通查询结果一样,但状态代码为 PGRES_SINGLE_TUPLE 而非 PGRES_TUPLES_OK 。在最后一行之后,或如果查询返回零行,则返回一个状态为 PGRES_TUPLES_OK 的零行对象;这是不会再到达更多行的信号。(但请注意,仍然需要继续调用 PQgetResult ,直到它返回 null。)所有这些 PGresult 对象都将包含普通 PGresult 对象对查询相同的行描述数据(列名称、类型等)。应像往常一样用 PQclear 释放每个对象。
使用管道模式时,需要为管道中的每个查询激活单行模式,然后再使用 PQgetResult 检索该查询的结果。有关更多信息,请参阅 Section 34.5。
-
PQsetSingleRowMode #
-
为当前执行的查询选择单行模式。
-
int PQsetSingleRowMode(PGconn *conn);
-
该函数只能在 PQsendQuery 或其同级函数之后立即调用,在连接上执行任何其他操作(例如 PQconsumeInput 或 PQgetResult )之前。如果在正确的时间调用,该函数将激活当前查询的单行模式并返回 1。否则模式保持不变,并且函数返回 0。在任何情况下,在完成当前查询后,模式都会恢复为正常模式。