pg_stat_statements_reset()权限在Google Cloud SQL上被拒绝PostgreSQL

6tr1vspr  于 12个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(130)

主要问题

由于权限不足,我无法执行函数SELECT pg_stat_statements_reset();以分析查询优化中的更改。错误消息如下:permission denied for function pg_stat_statements_reset
我想知道是否有其他方法可以重置云SQL PostgreSQL上的pg_stats?

环境

  • PG版本:PostgreSQL 9.6.6 on x86_64-pc-linux-gnu,compiled by gcc(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4,64-bit
  • 平台:Google Cloud SQL PostgreSQL
  • 用户:默认postgres用户,具有cloudsqlsuperuser角色
    尝试的步骤

我已经找到了关于这个主题的以前的答案,它建议pg_stat_statements_reset()应该从通过云控制台创建的默认postgres用户工作。
相关问题

bgtovc5b

bgtovc5b1#

Google Cloud SQL支持several modules for PostgreSQL以扩展其功能。
其中一个扩展(模块)是:pg_stat_statements。它允许跟踪服务器执行的SQL语句的执行统计。要重置统计,请使用pg_stat_statements_reset()函数。
在使用扩展(模块)之前,必须安装:
1.使用default user:postgres 从Cloud Shell连接到PostgreSQL示例

gcloud sql connect [INSTANCE_ID] --user=postgres

字符串
1.当连接到数据库时,create extension pg_stat_statements

CREATE EXTENSION pg_stat_statements


1.执行重置统计的函数,默认只有超级用户才能执行

SELECT pg_stat_statements_reset()


1.(可选)将重置统计信息的权限授予其他用户:

GRANT EXECUTE ON FUNCTION pg_stat_statements_reset TO xuser;

juzqafwq

juzqafwq2#

使用快照:

DROP TABLE IF EXISTS stat_snap_1;
DROP TABLE IF EXISTS stat_snap_2;

-- first time
CREATE TABLE stat_snap_1 AS SELECT * FROM pg_stat_statements WHERE queryid IS NOT NULL;
-- second time
CREATE TABLE stat_snap_2 AS SELECT * FROM pg_stat_statements WHERE queryid IS NOT NULL;

SELECT s2.calls - s1.calls, s2.total_time - s1.total_time, s2.*, s1.*
FROM stat_snap_2 s2
FULL OUTER JOIN stat_snap_1 s1 ON s1.queryid = s2.queryid
ORDER BY s2.total_time - s1.total_time DESC NULLS LAST;

字符串

相关问题