如何查询数据库中所有表的所有表列?
我试过的方法:
select tablename from pg_tables where schemaname = 'public'
UNION
方法处理 cmd 字符串。 我在一个数据库中有 19 个表,我的方法导致查询时间慢了 19 倍。而且,它不会返回我想要的东西。所有表都有两列,其中一列始终是名为
time
的列名。使用 UNION
方法不会返回 19 个 time
字符串。它只返回一个 time
字符串和 19 个其他列名。但我想要这样的东西:[('table_1', ['time', 'col']), ('table_2', ['time', 'col']), ('table_3', ['time', 'col])...]
。有没有优雅的方法来做到这一点?
最佳答案
您可以通过使用 array_agg()
和 information_schema.tables
和 information_schema.columns
表上的连接在单个查询中完成此操作。
这将返回类似于您的预期输出的内容:
select
t.table_name,
array_agg(c.column_name::text) as columns
from
information_schema.tables t
inner join information_schema.columns c on
t.table_name = c.table_name
where
t.table_schema = 'public'
and t.table_type= 'BASE TABLE'
and c.table_schema = 'public'
group by t.table_name;
在这里,我首先获取所有表,然后将其与列表连接,最后使用
array_agg()
将它们全部聚合到一个数组中,按表名分组。希望它有帮助:) 如果您有任何疑问,请随时询问。
关于python - PostgreSQL - 查询所有表的所有表列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51941149/