如何查询数据库中所有表的所有表列?

我试过的方法:

  • 使用 select tablename from pg_tables where schemaname = 'public'
  • 获取所有表名
  • 使用 Postgres 的 UNION 方法处理 cmd 字符串。
  • 执行 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.tablesinformation_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/

    10-09 16:25