如何查看用户在 PostgreSQL 中执行的查询?

Posted

技术标签:

【中文标题】如何查看用户在 PostgreSQL 中执行的查询?【英文标题】:How to see the queries executed by a user in PostgreSQL? 【发布时间】:2021-06-04 10:44:06 【问题描述】:

我们如何检查用户在 PostgreSQL 数据库中执行的查询?我有一个用例,其中一些应用程序(AWS EMR、Python 脚本)每天在 PostgreSQL DB 上执行查询。如果我能在任何失败的情况下查看/记录最后执行的查询,那将很有帮助。我尝试检查pg_stat_activity 表,但它列出了数据库服务器内部执行的查询。有关此问题的任何指示都会有所帮助。

在 AWS Redshift 中,我们通过表 STV_RECENTS、STL_QUERY 来实现这一点。我正在寻找类似的功能/解决方案,也可以通过任何其他方法来实现这一点。

【问题讨论】:

【参考方案1】:

如果您想要一个仪表板并且您正在使用 RDS/Aurora,您可以使用 AWS 提供的性能洞察,默认情况下它会列出用户执行的所有查询。

但是,pg_stat_activity 给出了启动正在执行的查询的用户名,您可以使用下面的查询,它会告诉您查询花费了多少时间,启动此查询的用户名以及文本查询

select now()-query_start,usename,query from pg_stat_activity where state='active';

您可以设置一个 cron 并将此数据附加到文本文件中 参考: How to use pg_stat_activity? https://www.postgresql.org/docs/9.2/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW

【讨论】:

怀疑这在 Redshift 中不可用。

以上是关于如何查看用户在 PostgreSQL 中执行的查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看PostgreSQL正在执行的SQL

在 python 中,如何执行缓解 SQL 注入的 postgresql 'LIKE %name%' 查询?

如何在 Python3.7 docker 容器中执行并行 PostgreSQL 查询?

如何在 postgresql 中使用不同的返回数据执行多个选择查询?

PostgreSQL 如何查看已运行的查询

如何在 postgresql 中获取正在运行的查询的执行计划?