如何在Postgresql中列出当前用户拥有的所有模式中的所有表?

如何在Postgresql中列出当前用户拥有的所有模式中的所有表?,第1张

概述我可以使用列出所有模式中的所有表 > \dt *.* 但是这也列出了系统表,这些表的数量远远超过了我关心的表.我喜欢我在公共模式中创建的所有表(以及可能的视图)以及我定义的任何模式. 我希望找到一种方法来实现这一点,而无需在搜索路径中显式添加模式,因为我按照此处的描述创建它们: https://stackoverflow.com/a/12902069 编辑: 根据接受的答案,我创建了以下视图: c 我可以使用列出所有模式中的所有表
> \dt *.*

但是这也列出了系统表,这些表的数量远远超过了我关心的表.我喜欢我在公共模式中创建的所有表(以及可能的视图)以及我定义的任何模式.

我希望找到一种方法来实现这一点,而无需在搜索路径中显式添加模式,因为我按照此处的描述创建它们:

https://stackoverflow.com/a/12902069

编辑:

根据接受的答案,我创建了以下视图:

create vIEw my_tables as select table_catalog,table_schema,table_name,table_type from information_schema.tables where table_schema not in ('pg_catalog','information_schema');

现在,以下命令给了我想要的东西:

select * from my_tables;
这将列出当前用户有权访问的所有表,而不仅仅是当前用户拥有的表:
select *from information_schema.tableswhere table_schema not in ('pg_catalog','information_schema')and table_schema not like 'pg_toast%'

(我不完全确定实际上不需要’pg_toast%’.)

我真的需要所有者信息,您可能需要使用pg_class和相关表.

编辑:这是包含所有者信息的查询:

select nsp.nspname as object_schema,cls.relname as object_name,rol.rolname as owner,case cls.relkind         when 'r' then 'table'         when 'm' then 'MATERIAliZED_VIEW'         when 'i' then 'INDEX'         when 'S' then 'SEQUENCE'         when 'v' then 'VIEW'         when 'c' then 'TYPE'         else cls.relkind::text       end as object_typefrom pg_class cls  join pg_roles rol on rol.oID = cls.relowner  join pg_namespace nsp on nsp.oID = cls.relnamespacewhere nsp.nspname not in ('information_schema','pg_catalog')  and nsp.nspname not like 'pg_toast%'  and rol.rolname = current_user  --- remove this if you want to see all objectsorder by nsp.nspname,cls.relname;
总结

以上是内存溢出为你收集整理的如何在Postgresql中列出当前用户拥有的所有模式中的所有表?全部内容,希望文章能够帮你解决如何在Postgresql中列出当前用户拥有的所有模式中的所有表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存