Postgresql pg_stat_语句已启用,但该表不存在
我已经启动并运行了postgresql-9.4,最近在官方的帮助下启用了pg_stat_语句模块 但我在使用时遇到以下错误:Postgresql pg_stat_语句已启用,但该表不存在,postgresql,psql,pg-stat-statements,Postgresql,Psql,Pg Stat Statements,我已经启动并运行了postgresql-9.4,最近在官方的帮助下启用了pg_stat_语句模块 但我在使用时遇到以下错误: 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();
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();
我与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)
以下是扩展版本查询的结果:
postgres=# SELECT * FROM pg_available_extension_versions WHERE name = 'pg_stat_statements';
name | version | installed | superuser | relocatable | schema | requires | comment
--------------------+---------+-----------+-----------+-------------+--------+----------+-----------------------------------------------------------
pg_stat_statements | 1.2 | f | t | t | | | track execution statistics of all SQL statements executed
(1 row)
任何帮助都将不胜感激。未安装扩展:
SELECT *
FROM pg_available_extensions
WHERE
name = 'pg_stat_statements' and
installed_version is not null;
如果表为空,请创建扩展名:
CREATE EXTENSION pg_stat_statements;
我第一次使用liquibase部署环境时遇到了同样的问题。 我知道我的回答可能与你的问题无关,但这是第一个谷歌搜索结果,所以我认为像我这样的其他人可以带着我同样的问题来到这里 这些是PosGreSQL元数据表,在生成第一个xml文件时由liquibase检索 在我的例子中,它只是无用的自动生成代码,所以我通过删除以下行来解决它:
<changeSet author="martinlarizzate (generated)" id="1588181532394-7">
<createView fullDefinition="false" viewName="pg_stat_statements"> SELECT pg_stat_statements.userid,
pg_stat_statements.dbid,
pg_stat_statements.queryid,
pg_stat_statements.query,
pg_stat_statements.calls,
pg_stat_statements.total_time,
pg_stat_statements.min_time,
pg_stat_statements.max_time,
pg_stat_statements.mean_time,
pg_stat_statements.stddev_time,
pg_stat_statements.rows,
pg_stat_statements.shared_blks_hit,
pg_stat_statements.shared_blks_read,
pg_stat_statements.shared_blks_dirtied,
pg_stat_statements.shared_blks_written,
pg_stat_statements.local_blks_hit,
pg_stat_statements.local_blks_read,
pg_stat_statements.local_blks_dirtied,
pg_stat_statements.local_blks_written,
pg_stat_statements.temp_blks_read,
pg_stat_statements.temp_blks_written,
pg_stat_statements.blk_read_time,
pg_stat_statements.blk_write_time
FROM pg_stat_statements(true) pg_stat_statements(userid, dbid, queryid, query, calls, total_time, min_time, max_time, mean_time, stddev_time, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time, blk_write_time);</createView>
</changeSet>
可能您正在使用的Posgres用户不允许访问扩展。要使用pg_stat_statements_reset,如果我没弄错的话,你需要成为超级用户。谢谢你的评论,伙计,但我已经检查过了,postgres是超级用户:postgres=show是超级用户;是超级用户--------在第1行,嗯..但是我已经将这些行添加到postgresql.conf并重新启动了服务器。shared_preload_libraries='pg_stat_statements'更改需要重新启动pg_stat_statements.max=1000 pg_stat_statements.track=我还应该做些什么吗?您应该运行创建扩展pg_stat_statements;谢谢糟糕的是,我以为它会在添加到postgresql.conf.Strange之后自动创建。createextension表示它已经安装,但列表中并没有这样的表。还可以做什么?回答我自己的问题,它在加载后开始跟踪所有数据库的统计数据。为了能够访问它,您必须在任何数据库中创建扩展。但只有超级用户才能做到这一点,它允许访问所有数据库的统计数据。