如何查看PostgreSQL正在执行的SQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查看PostgreSQL正在执行的SQL相关的知识,希望对你有一定的参考价值。

参考技术A 您好
SELECT
procpid,
start,
now() - start AS lap,
current_query
FROM
(SELECT
backendid,
pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS start,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS S
) AS S
WHERE
current_query <> '<IDLE>'
ORDER BY
lap DESC;

procpid:进程id
start:进程开始时间
lap:经过时间
current_query:执行中的sql
怎样停止正在执行的sql
SELECT pg_cancel_backend(进程id);
或者用系统函数
kill -9 进程id;

仅供参考·
参考技术B SELECT
procpid,
start,
now() - start AS lap,
current_query
FROM
(SELECT
backendid,
pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS start,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS S
) AS S
WHERE
current_query <> '<IDLE>'
ORDER BY
lap DESC;

procpid:进程id
start:进程开始时间
lap:经过时间
current_query:执行中的sql
怎样停止正在执行的sql
SELECT pg_cancel_backend(进程id);
或者用系统函数
kill -9 进程id;本回答被提问者和网友采纳

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

【中文标题】如何查看用户在 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正在执行的SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何查PostgreSQL 数据库中所有的表

如何查看mysql执行过的语句

如何查询mysql的执行记录

如何查看mysql sql执行时间

db2 怎样查一个sql连接执行过的所有语句?

在MS SQL Server中怎么查看正在执行的SQL