从pgPromise查询结果

时间:2017-05-21 11:52:07

标签: node.js postgresql pg-promise

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

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

这样做的目的是使API能够返回查询结果和执行SQL之类的元数据。这可能吗?谢谢!

1 个答案:

答案 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()

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