我想进一步研究pg_stat_activity
中列出的PID,以了解他们最后一次成功调用SET SESSION AUTHORIZATION
设置其会话授权的内容。我在PostgreSQL 9.0上需要哪个表或视图?
答案 0 :(得分:2)
PostgreSQL不公开这些信息,至少在9.4或任何先前版本中。
pg_stat_activity
中的用户ID是登录用户;这是RESET SESSION AUTHORIZATION
回归的用户。当您SET SESSION AUTHORIZATION
或SET ROLE
时,它不会改变。
有关当前有效会话授权和当前角色的信息是后端内部的。您可以使用SELECT current_user, current_role
等在本地访问它们到后端,但是没有进程间的方法来获取它们。
拥有它可能会很好,如果可以添加它而不会使维护pg_stat_activity
或查询它更加昂贵。但是,您需要深入了解PostgreSQL的内容,并开发一个补丁来公开信息。
令人惊讶的是,log_line_prefix
似乎没有包含格式符号来显示有效角色和有效会话用户。鉴于PgBouncer使用会话授权,这是非常奇怪的,我觉得我一定错过了一些东西。
在任何情况下,我看到这样做的唯一方法是挖掘日志,记录pid和会话ID,然后将成功的SET SESSION AUTHORIZATION
调用与后续语句相关联。