重定向 PostgreSQL Qt 驱动程序 stdout/stderr 输出

Redirect PostgreSQL Qt driver stdout/stderr output

我目前调用 qInstallMsgHandler() 将所有 Qt 错误、警告和调试输出重定向到我自己的消息处理程序。

这在 99% 的时间都有效,但是当通过 QSqlQuery 对象执行 SQL 语句时,我仍然得到以下输出到 stderr:

**WARNING:  nonstandard use of \ in a string literal

LINE 1: EXECUTE qpsqlpstmt_11 ('<?xml version=''1.0'' encoding=''U

HINT:  Use the escape string syntax for backslashes, e.g., E'\'.**

数据库是 PostgresSQL 8.4 版。我还有什么想法可以拦截和重定向此警告吗?

似乎 Qt 驱动程序正在使用的某些 PostgreSQL 库写入 stderr

Yan 可以这样重定向 stderr

freopen("my_log.txt", "w", stderr);

对于其他遇到相同问题的人,您可以使用以下代码禁用警告:

QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO true");

但不幸的是,这意味着问题对调用者是隐藏的,反斜杠在数据库中自动转义,这可能会导致以后检索数据时出现问题。