PostgreSQL如何查看已运行的查询

110

我在我的电脑上有一个PostgreSQL数据库,并且有一个应用程序在上面运行查询。

我该如何查看在我的数据库上运行了哪些查询?

我使用的是Linux计算机和pgadmin。


你的应用程序长什么样子,它如何访问数据库? - pavel_kazlou
5个回答

93

开启服务器日志:

log_statement = all

这将记录每次与数据库服务器的通信。

在生产服务器上不建议使用log_statement = all,因为会生成巨大的日志文件。
有关日志参数的手册:

log_statement (enum)

控制要记录哪些SQL语句。有效值包括none(关闭),ddlmodall(所有语句)。[...]

重置log_statement参数需要重新加载服务器(SIGHUP),但不需要重新启动服务器。请阅读设置参数的手册

不要将服务器日志与pgAdmin的日志混淆。这是两个不同的东西!

如果您有访问权限并正确设置了文件,则还可以在pgAdmin中查看服务器日志文件。在pgadmin III中,可以查看:工具 -> 服务器状态。该选项已在pgadmin4中删除。

我更喜欢使用vim(或您选择的任何编辑器/阅读器)来读取服务器日志文件。


Brandstetter 我只是想查看日志并将其关闭。仅将log_statement设置为all就足够了吗?我已经打开了服务器状态,它要求我安装一个软件包,但它打开了一个窗口并写道:“此服务器的日志不可用。”我应该重新启动我的postgresql吗? - kamaci
2
@kamaci:我在我的答案中添加了额外的信息。请点击我提供的链接以获取更多信息。 - Erwin Brandstetter

89

PostgreSql在日志记录技术方面非常先进。

日志存储在安装文件夹/data/pg_log文件夹中。而日志设置则保存在postgresql.conf文件中。

通常情况下,日志格式被设为stderr。但是建议使用CSV日志格式。要启用CSV格式,请进行更改

log_destination = 'stderr,csvlog'   
logging_collector = on
为了记录所有查询,这对于新安装非常有用,需要为查询设置最小执行时间。
log_min_duration_statement = 0

要查看数据库上的活动查询,请使用

SELECT * FROM pg_stat_activity

要记录特定的查询,请设置查询类型

log_statement = 'all'           # none, ddl, mod, all

欲了解更多有关查询日志记录的信息,请参阅PostgreSql日志记录


9

我在从brew安装的Mac上发现了日志文件,路径为/usr/local/var/log/postgres.log。


按下Command+Shift+.可以在用户文件夹中显示隐藏文件。.pgadmin -> pgadim4.log - AJ AJ

3

在使用Postgres 10.6与Django时,默认启用了日志记录,我只需执行以下操作:

tail -f /var/log/postgresql/*

Ubuntu 18.04, django 2+, python3+


这似乎只记录了插入和查询失败的错误,尽管是有帮助的答案。 - Peter Chaula

2
如果在postgresql.conf中启用了日志配置,并使用此日志目录名称,则可以在pg_log文件夹中查看日志记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接