使用pg-promise记录特定的PostgreSQL查询日志

13
我正在使用Nodejs中的pg-promise包执行PostgreSQL查询。我想要查看已执行的查询,只想调试某些特定的查询。
我可以看到一种推荐的方法是使用pg-monitor捕获事件并将其记录下来,如示例documentation中所述。
如果不使用pg-monitor,是否有一种简单的方法只打印已执行的准备好的查询?我在文档中找不到它。
示例:
db.query("SELECT * FROM table WHERE id = $/id/", {id: 2})

如何打印此查询以产生结果?
SELECT * FROM table WHERE id = 2
1个回答

26

有没有一种简单的方法可以只打印执行的预处理查询...

一般来说是可以的,参见下文。但是对于预处理查询,不行,因为它们在服务器端被格式化。

const query = pgp.as.format('SELECT * FROM table WHERE id = $/id/', {id: 2});
console.log(query);
await db.any(query);

如果您想打印出模块执行的所有查询,而不使用pg-monitor,只需在初始化库时添加事件query处理程序:

const initOptions = {
  query(e) {
    console.log(e.query);
  }
};
const pgp = require('pg-promise')(initOptions);

options非常棒。我还没有完全探索它。谢谢。 - mythicalcoder
不确定这个问题是否与选项相关-为了更快的可见性在此进行评论。请检查一下。谢谢-https://stackoverflow.com/questions/65152018/pg-promise-timeout-while-using-express-generator-format-but-works-fine-with-bas - mythicalcoder
1
当我看到一个有太多未解决问题的库时,我经常会去告诉他们:“也许你应该像vitaly-t一样管理库”。 - PirateApp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接