PostgreSQL 如何查看已运行的查询

Posted

技术标签:

【中文标题】PostgreSQL 如何查看已运行的查询【英文标题】:PostgreSQL how to see which queries have run 【发布时间】:2012-01-02 17:53:09 【问题描述】:

我的计算机上有一个 PostgreSQL 数据库,并且我有一个在其上运行查询的应用程序。

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

我使用 Linux 计算机和 pgadmin。

【问题讨论】:

有关您的应用程序是什么样的以及它如何访问数据库的任何详细信息? 【参考方案1】:

开启服务器日志:

log_statement = all

这将记录对数据库服务器的每次调用。

我不会在生产服务器上使用log_statement = all。产生巨大的日志文件。The manual about logging-parameters:

log_statement (enum)

控制记录哪些 SQL 语句。有效值为 none(关闭)、ddlmodall(所有语句)。 [...]

重置log_statement 参数需要重新加载服务器 (SIGHUP)。 不需要重新启动。阅读the manual on how to set parameters。

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

如果您有权访问这些文件(远程服务器可能不是这种情况)并正确设置,您还可以查看 pgAdmin 中的服务器日志文件。在 pgadmin III 中,查看:Tools -> Server status。该选项已在 pgadmin4 中删除。

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

【讨论】:

Brandstetter 我只会查看日志并将其关闭。仅使 log_statement = all 就足够了吗?我打开了服务器状态,它询问我有关安装软件包的信息,但它打开了一个窗口并写道:日志不适用于此服务器。我应该重新启动我的 postgresql 吗? @kamaci:我用附加信息修改了我的答案。按照我提供的链接了解更多信息。【参考方案2】:

PostgreSql 在与日志记录技术相关时非常先进

日志存储在Installationfolder/data/pg_log folder。而日志设置放在postgresql.conf文件中。

日志格式通常设置为stderr。但推荐使用 CSV 日志格式。为了在

中启用 CSV 格式更改
log_destination = 'stderr,csvlog'   
logging_collector = on

为了记录所有查询,对于新安装非常有用,请设置 min。查询的执行时间

log_min_duration_statement = 0

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

SELECT * FROM pg_stat_activity

要记录特定查询设置查询类型

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

有关记录查询的更多信息,请参阅PostgreSql Log。

【讨论】:

【参考方案3】:

我在 brew 的 mac 安装上的 /usr/local/var/log/postgres.log 中找到了日志文件。

【讨论】:

【参考方案4】:

在 postgres 10.6 中使用 Django 时,默认情况下启用了日志记录,我可以简单地执行以下操作:

tail -f /var/log/postgresql/*

Ubuntu 18.04、django 2+、python3+

【讨论】:

这似乎只记录因错误而失败的插入和查询,但还是很有帮助的答案。【参考方案5】:

您可以在 pg_log 文件夹中查看是否使用此日志目录名称在 postgresql.conf 中启用了日志配置。

【讨论】:

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

postgresql - 查看架构权限

如何查看PostgreSQL正在执行的SQL

如何查看linux是不是安装数据库

如何查看本地安装的Postgresql版本号

从命令行运行 PostgreSQL 查询

centos7如何查询已运行服务?