我正在编写一个API,使用节点和pg-promise对多个postgres数据库进行查询。
我对从查询结果中获取执行的SQL语句感兴趣。像pg-monitor这样的东西输出到控制台。我已经设置了pg-monitor并注意到有一个setLog
方法可以用来获取我需要的数据,但如果我可以从我正在执行的地方获取相同的数据,那将是完美的。来自的查询。
这样做的目的是使API能够返回查询结果和执行SQL之类的元数据。这可能吗?谢谢!
答案 0 :(得分:1)
如果我可以从我正在执行查询的地方获取相同的数据,那将是完美的。
在这种情况下,您可以自己format查询,记录它,然后将其传递给查询方法:
const query = pgp.as.format('SELECT * FROM table WHERE id = $1', 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 = $1', values);
console.log('QUERY:', q);
return q;
};
db.any(query, values).then().catch()
这样更安全,因为任何与查询格式相关的错误都将由查询方法处理。