从 pgPromise 查询结果中获取执行的 SQL 语句

Get executed SQL statement from pgPromise query result

我正在编写一个 API,它使用节点和 pg-promise 对多个 postgres 数据库进行查询。

我有兴趣从查询结果中获取已执行的 SQL 语句。 pg-monitor 之类的东西输出到控制台。我已经设置了 pg-monitor 并注意到有一个 setLog 方法可以用来获取我需要的数据,但是如果我可以从我正在执行的地方获取相同的数据那将是完美的查询自.

重点是启用 API 到 return 查询结果和元数据,例如已执行的 SQL。这可能吗?谢谢!

it would be perfect if I could get the same data from the place I'm executing the query from.

在这种情况下,您可以format自己查询,记录它,然后将其传递给查询方法:

const query = pgp.as.format('SELECT * FROM table WHERE id = ', 123);
console.log('QUERY:', query);
db.any(query).then().catch()

所有的查询方法都在下面使用这个格式化函数。

但是请注意区别。当查询格式有问题时,任何查询方法都会在其 catch 部分报告它,而如果有问题,直接使用 as.format 函数将抛出错误,因为格式是同步的。

更新

使用 pg-promise 8.2.0 版及更高版本,您甚至可以执行以下操作:

const query = values => {
    const q = pgp.as.format('SELECT * FROM table WHERE id = ', values);
    console.log('QUERY:', q);
    return q;
};
db.any(query, values).then().catch()

这种方式更安全,因为任何与查询格式相关的错误都将由查询方法处理。