我需要查看提交给PostgreSQL服务器的查询。通常我会使用SQL Server探查器在SQL Server域中执行此操作,但我还没有找到如何在PostgreSQL中执行此操作。似乎有相当多的付费工具,我希望有一个开源变体。
答案 0 :(得分:49)
您可以使用log_statement配置设置获取服务器的所有查询列表
https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement
只需设置它,然后记录文件路径就可以了。您还可以将其配置为仅记录长时间运行的查询。
然后,您可以接受这些查询并对它们运行EXPLAIN,以了解它们发生了什么。
https://www.postgresql.org/docs/9.2/static/using-explain.html
答案 1 :(得分:28)
添加Joshua的答案,看which queries are currently running只需在任何时候发出以下声明(例如在PGAdminIII的查询窗口中):
SELECT datname,procpid,current_query FROM pg_stat_activity;
示例输出:
datname | procpid | current_query
---------------+---------+---------------
mydatabaseabc | 2587 | <IDLE>
anotherdb | 15726 | SELECT * FROM users WHERE id=123 ;
mydatabaseabc | 15851 | <IDLE>
(3 rows)
答案 2 :(得分:22)
我发现了pgBadger(http://dalibo.github.io/pgbadger/),它是一个很棒的工具,可以多次拯救我的生命。以下是报告示例:http://dalibo.github.io/pgbadger/samplev4.html。 如果您打开它并转到“顶部”菜单,您可以看到最慢的查询和耗时的查询。 然后,您可以询问详细信息并查看以小时显示查询的精美图表,如果使用详细信息按钮,则可以以漂亮的形式查看SQL文本。所以我可以看到这个工具是免费且完美的。
答案 3 :(得分:5)
答案 4 :(得分:0)
添加约书亚和vladr的答案
它对我有用:
打开postgresql.conf
集:
log_statement ='mod'
log_min_messages = debug2
打开文件夹中的最后一个日志 C:\ Program Files \ PostgreSQL \ 9.6 \ data \ pg_log \
查询将在那里。
我使用postgresql-9.6.5-1
答案 5 :(得分:0)
您可以使用pg_stat_statements扩展名。
如果在docker中运行数据库,只需在docker-compose.yml
中添加此命令,否则只需查看设置的安装说明:
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
然后在数据库中运行以下查询:
CREATE EXTENSION pg_stat_statements;
现在来看运行花费更多时间的操作:
SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;
或在该视图上处理其他查询,以查找所需内容。