使用 pg-promise 记录特定的 postgresql 查询

Posted

技术标签:

【中文标题】使用 pg-promise 记录特定的 postgresql 查询【英文标题】:Log specific postgresql query using pg-promise 【发布时间】:2017-10-02 12:09:27 【问题描述】:

我正在使用带有 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】:

有没有一种简单的方法来打印已执行的准备好的查询...

一般的查询 - 是的,见下文。 Prepared Query - 不,根据定义,这些是在服务器端格式化的。

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 很棒。我还没有完全探索它。谢谢。 不确定这个问题可能与选项有关 - 为了更快地在此处发表评论。请检查。谢谢 - ***.com/questions/65152018/…

以上是关于使用 pg-promise 记录特定的 postgresql 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用nodejs pg-promise库将带有uuid数组的记录插入pg表

Pg-promise插入/事务在异步队列中不起作用

使用 pg-promise 的连接池

pg-promise:返回查询结果的正确方法

Next.js API 路由与 pg-promise

将 pg-promise 任务与 graphql 和 dataloader 一起使用