pg_stat_statements_reset() 权限在 Google Cloud SQL PostgreSQL 上被拒绝
pg_stat_statements_reset() permission denied on Google Cloud SQL PostrgreSQL
主要问题
由于权限不足,我无法执行函数 SELECT pg_stat_statements_reset();
以分析查询优化的变化。
错误消息如下:
permission denied for function pg_stat_statements_reset
我想知道是否有任何其他方法可以在 Cloud SQL PostgreSQL 上重置 pg_stats?
环境
- PG 版本:x86_64-pc-linux-gnu 上的 PostgreSQL 9.6.6,由 gcc 编译(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4,64 位
- 平台:Google云SQLPostgreSQL
- 用户:具有
cloudsqlsuperuser
角色的默认 postgres 用户
尝试的步骤
我找到了关于此主题的先前答案,该答案建议 pg_stat_statements_reset()
应该从通过云控制台创建的默认 postgres 用户开始工作。但是,列出的解决方案不起作用,它 returns 相同的权限被拒绝错误
Google Cloud SQL 支持 several modules for PostgreSQL 扩展其功能。
其中一个扩展(模块)是:pg_stat_statements。它允许跟踪服务器执行的 SQL 语句的执行统计信息。要重置统计功能,请使用 pg_stat_statements_reset()。
在使用扩展(模块)之前,必须安装:
- Connect to the PostgreSQL instance 来自 Cloud Shell 使用默认 用户:postgres
gcloud sql connect [INSTANCE_ID] --user=postgres
CREATE EXTENSION pg_stat_statements
- 执行重置统计的功能。 默认情况下,只能由超级用户执行:
SELECT pg_stat_statements_reset()
- (可选)授予其他用户重置统计数据的权限:
GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO xuser;
有快照:
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;
主要问题
由于权限不足,我无法执行函数 SELECT pg_stat_statements_reset();
以分析查询优化的变化。
错误消息如下:
permission denied for function pg_stat_statements_reset
我想知道是否有任何其他方法可以在 Cloud SQL PostgreSQL 上重置 pg_stats?
环境
- PG 版本:x86_64-pc-linux-gnu 上的 PostgreSQL 9.6.6,由 gcc 编译(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4,64 位
- 平台:Google云SQLPostgreSQL
- 用户:具有
cloudsqlsuperuser
角色的默认 postgres 用户
尝试的步骤
我找到了关于此主题的先前答案,该答案建议 pg_stat_statements_reset()
应该从通过云控制台创建的默认 postgres 用户开始工作。但是,列出的解决方案不起作用,它 returns 相同的权限被拒绝错误
Google Cloud SQL 支持 several modules for PostgreSQL 扩展其功能。
其中一个扩展(模块)是:pg_stat_statements。它允许跟踪服务器执行的 SQL 语句的执行统计信息。要重置统计功能,请使用 pg_stat_statements_reset()。
在使用扩展(模块)之前,必须安装:
- Connect to the PostgreSQL instance 来自 Cloud Shell 使用默认 用户:postgres
gcloud sql connect [INSTANCE_ID] --user=postgres
CREATE EXTENSION pg_stat_statements
- 执行重置统计的功能。 默认情况下,只能由超级用户执行:
SELECT pg_stat_statements_reset()
- (可选)授予其他用户重置统计数据的权限:
GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO xuser;
有快照:
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;