在postgres 9.6上运行了更多测试后,我也获得了这些消息<insufficient privilege>
。
我在postgres 9.6和13上运行了以下查询并获得了不同的结果:
SELECT userid, usename, query
FROM pg_stat_statements
INNER JOIN pg_catalog.pg_user
ON userid = usesysid;
我注意到在postgres 9.6中我看不到的查询来自角色/用户 cloudsqlagent 和 cloudsqladmin(预配置的 Cloud SQL postgres 角色)。
这不会发生在postgres 13或更好的版本 10 及更高版本中,这是因为在使用 EXTENSION pg_stat_statements 时,来自所有用户的 SQL 语句对具有cloudsqlsuperuser的用户可见。这是产品在不同版本中的行为,在此链接的蓝色框中进行了描述。
基本上只有在9.6版中,来自所有用户的 SQL 语句对于具有cloudsqlsuperuser角色的用户是不可见的。
所以如果我在主服务器上启用它,它也应该在副本上启用?
是的,在 master 中启用扩展后,您可以连接到副本并使用以下命令检查 pg_stat_statements 是否已启用:
SELECT * FROM pg_extension;
如果您希望跨 postgres 版本的行为更加统一,或者如果您强烈需要所有用户的 SQL 语句对 cloudsqlsuperuser 角色可见,我建议您使用模板功能请求创建一个公共问题跟踪器。
希望这个对你有帮助。