我已经启动了postgresql-9.4,并且我最近在官方文档的帮助下启用了pg_stat_statements模块.
但是我在使用时遇到以下错误:
postgres=# SELECT * FROM pg_stat_statements;
ERROR:  relation "pg_stat_statements" does not exist
LINE 1: SELECT * FROM pg_stat_statements;
postgres=# SELECT pg_stat_statements_reset();
ERROR:  function pg_stat_statements_reset() does not exist
LINE 1: SELECT pg_stat_statements_reset();
Run Code Online (Sandbox Code Playgroud)
我使用postgres用户登录psql.我还检查了可用的扩展名列表:
postgres=# SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'
;
        name        | default_version | installed_version |                          comment                          
--------------------+-----------------+-------------------+-----------------------------------------------------------
 pg_stat_statements | 1.2             |                   | track execution statistics of all SQL statements executed
(1 row)
Run Code Online (Sandbox Code Playgroud)
这是扩展版本查询的结果:
postgres=# SELECT * FROM pg_available_extension_versions WHERE name = 'pg_stat_statements';
        name        | …Run Code Online (Sandbox Code Playgroud) 我有一个使用 .yml、Dockerfile(s) 等从几个不同的图像构建的 DOCKER 容器。到目前为止,一切都构建并运行良好,除了我在标题中看到的这个问题:
index-db_1   | 2021-02-22 23:18:33.388 UTC [31] WARNING:  could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted
Run Code Online (Sandbox Code Playgroud)
该数据库索引映射到主机上 Docker 包根目录中的一个文件夹,就数据库而言,其他一切似乎都可以正常工作。我使用的是 Mac,但如果我从 CLI 列出 DB 文件夹的权限,我会得到:
-rw-------@  1 sscotti  staff      3 Feb 22 11:01 PG_VERSION
drwx------@  6 sscotti  staff    192 Feb 22 11:54 base
drwx------@ 60 sscotti  staff   1920 Feb 22 16:00 global
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_commit_ts
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_dynshmem
-rw-------@  1 sscotti  staff   4782 Feb …Run Code Online (Sandbox Code Playgroud) 我为PostgreSQL 启用了扩展名pg_stat_statements
create EXTENSION pg_stat_statements;
Run Code Online (Sandbox Code Playgroud)
如何在PostgreSQL 9.x中停止使用扩展名pg_stat_statements?
即使是原始文档也不包含任何示例.
我在Rails 4中使用Apartment gem来支持Heroku上的Postgres 9.3.3中的多租户.
Apartment gem创建新租户时发生错误.
深入调查显示已创建架构,但内部没有表格.
Heroku日志显示错误:
PG::Error: ERROR:  function pg_stat_statements_reset() does not exist
Run Code Online (Sandbox Code Playgroud) ruby-on-rails-4 heroku-postgres postgresql-9.3 apartment-gem pg-stat-statements
我想知道 postgres 中的“pg_stat_statements”视图。数据的时间范围是什么?它是否显示过去 24 小时内执行的查询或执行的整体查询?由于该表不包含任何时间戳。
pg_stat_statements(谢天谢地)在规范化查询以聚合统计数据方面非常聪明,无论您传递什么参数。但是,我面临这样一种情况,即从我们应用程序的许多位置调用特定查询,我想根据这些不同位置获得单独的统计信息。受Marginalia 库的启发,我尝试附加 SQL 注释来注释查询。不幸的是它不起作用。看这个例子:
SELECT * FROM users WHERE email = 'a@b.c' /* action: signup */
SELECT * FROM users WHERE email = 'x@y.z' /* action: login */
Run Code Online (Sandbox Code Playgroud)
发生的情况是 pg_stat_statements 存储查询的规范化表示及其看到的第一个评论:
SELECT * FROM users WHERE email = $1 /* action: signup */
Run Code Online (Sandbox Code Playgroud)
然后,如果我用不同的评论(或根本没有评论)调用相同的查询,统计信息将被聚合到同一个项目中。从规范化的查询表示中有效地忽略了注释。
有什么方法可以调用等效的 SQL 查询,但让 pg_stat_statements 单独跟踪它们吗?
我启动了以下命令,如本文档所示: https: //www.postgresql.org/docs/current/pgstatstatements.html
SELECT query, 
       calls, 
       total_time, 
       rows, 
       100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements 
ORDER BY total_time DESC 
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
但我不知道如何解释stddev_time(显然这可以显示导致问题的查询)
我不明白如何解释以下值:
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
Run Code Online (Sandbox Code Playgroud)
接近 0 还是 100 比较好?