暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL pg_stat_activity query显示的是当前最外层调用 - 应用:获取当前执行的SQL

digoal 2019-07-12
399

作者

digoal

日期

2019-07-12

标签

PostgreSQL , pg_stat_activity , query , 捕获SQL


背景

pg_stat_activity是PG的活跃会话视图,字段如下:

postgres=# \d pg_stat_activity View "pg_catalog.pg_stat_activity" Column | Type | Collation | Nullable | Default ------------------+--------------------------+-----------+----------+--------- datid | oid | | | datname | name | | | pid | integer | | | usesysid | oid | | | usename | name | | | application_name | text | | | client_addr | inet | | | client_hostname | text | | | client_port | integer | | | backend_start | timestamp with time zone | | | xact_start | timestamp with time zone | | | query_start | timestamp with time zone | | | state_change | timestamp with time zone | | | wait_event_type | text | | | wait_event | text | | | state | text | | | backend_xid | xid | | | backend_xmin | xid | | | query | text | | | backend_type | text | | |

通过查看query可以得到当前或这个连接最后一次执行的SQL,但是需要注意的是,它记录的是最外层的SQL,当一个SQL里面又调用了函数,函数里面又执行了SQL时,不会展示在这里。

如果你想在一个某些地方跟踪当前最外层的SQL是什么,可以自定义一个函数来得到,或者直接查询当前会话的pg_stat_activity.query得到。

例子

create or replace function getquery() returns text as $$ select query from pg_stat_activity where pid=pg_backend_pid(); $$ language sql strict;

postgres=# select getquery() as sql,oid,relkind,relname from pg_class limit 1; sql | oid | relkind | relname ---------------------------------------------------------------------+-------+---------+---------------- select getquery() as sql,oid,relkind,relname from pg_class limit 1; | 16393 | t | pg_toast_16390 (1 row)

postgres=# do language plpgsql $$ declare begin raise notice '%', getquery(); end; $$; psql: NOTICE: do language plpgsql $$ declare begin raise notice '%', getquery(); end; $$; DO

postgres=# select upper(getquery()) , getquery(); upper | getquery ----------------------------------------+---------------------------------------- SELECT UPPER(GETQUERY()) , GETQUERY(); | select upper(getquery()) , getquery(); (1 row)

参考

《PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)》

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论