获取正在使用数据库/模式/表的用户列表

Posted

技术标签:

【中文标题】获取正在使用数据库/模式/表的用户列表【英文标题】:Get the list of users who are using database/schema/table 【发布时间】:2018-07-18 17:11:01 【问题描述】:

在我的项目中有一个用例,我想向用户展示有权在 postgresql 中使用该数据库/模式/表的用户。假设我创建了一个数据库员工。所以我想列出正在访问这个数据库的用户。架构和表相同。我试过这个:

SELECT 
    * 
FROM 
    information_schema.tables 
WHERE 
    table_schema not in ('pg_catalog', 'information_schema') AND 
    table_schema not like 'pg_toast%'

但它提供了有关当前用户可以访问的信息。我想要访问正在使用该数据库/表/模式/列的用户的列表。

【问题讨论】:

如果您的列中有 UpdatedBy 和 UpdatedAt,您可以通过“UpdatedBy/UpdatedAt”查询每个表,这样您就可以获得使用这些表的用户列表 意味着我必须在我创建的表中添加额外的列 【参考方案1】:

你可以使用函数has_table_privilege()来实现你想要的。

select has_table_privilege('user_name', 'schema.table', 'select');

更多信息here。

我想您需要成为超级用户才能获得所有结果。下面显示了所有拥有权限的用户,不一定是他们是否正在访问这些表。

现在您可以调整查询以将所有用户加入表列表 -

SET search_path TO public,
      schema1;

SELECT *, 
       usename,
       has_table_privilege(usename, table_schema||'.'||table_name, 'select') as has_privilege
FROM SVV_TABLES
JOIN PG_USER
ON 1=1
WHERE table_schema = 'schema1';

【讨论】:

它适用于红移。谢谢你。但是,如果我不使用 redshift,我使用的是简单的 postgresql。然后将使用哪个表而不是 SVV_TABLES

以上是关于获取正在使用数据库/模式/表的用户列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定模式中的所有表的选择列表中获取总行数和最大(时间戳)列

需要查询以获取已使用和未使用表的列表[关闭]

在线时更新列表视图内容

在 ms-access 中获取表的外键约束列表?

使用 DAO 模式

如何获取高超音速表的列表