哪个postgres系统表存储PID到会话授权的映射?

时间:2013-12-13 01:43:53

标签: postgresql session pid system-tables

我想进一步研究pg_stat_activity中列出的PID,以了解他们最后一次成功调用SET SESSION AUTHORIZATION设置其会话授权的内容。我在PostgreSQL 9.0上需要哪个表或视图?

1 个答案:

答案 0 :(得分:2)

PostgreSQL不公开这些信息,至少在9.4或任何先前版本中。

pg_stat_activity中的用户ID是登录用户;这是RESET SESSION AUTHORIZATION回归的用户。当您SET SESSION AUTHORIZATIONSET ROLE时,它不会改变。

有关当前有效会话授权和当前角色的信息是后端内部的。您可以使用SELECT current_user, current_role等在本地访问它们到后端,但是没有进程间的方法来获取它们。

拥有它可能会很好,如果可以添加它而不会使维护pg_stat_activity或查询它更加昂贵。但是,您需要深入了解PostgreSQL的内容,并开发一个补丁来公开信息。

令人惊讶的是,log_line_prefix似乎没有包含格式符号来显示有效角色和有效会话用户。鉴于PgBouncer使用会话授权,这是非常奇怪的,我觉得我一定错过了一些东西。

在任何情况下,我看到这样做的唯一方法是挖掘日志,记录pid和会话ID,然后将成功的SET SESSION AUTHORIZATION调用与后续语句相关联。