【问题标题】:List all tables in postgresql information_schema列出postgresql information_schema中的所有表
【发布时间】:2011-01-17 14:41:32
【问题描述】:

在 PostgreSQL 的 information_schema 中列出所有表的最佳方式是什么?

澄清一下:我正在使用一个空数据库(我没有添加任何我自己的表),但我想查看 information_schema 结构中的每个表。

【问题讨论】:

    标签: sql postgresql information-schema


    【解决方案1】:

    您应该能够只运行select * from information_schema.tables 以获取 Postgres 为特定数据库管理的每个表的列表。

    您还可以添加where table_schema = 'information_schema' 以仅查看信息架构中的表。

    【讨论】:

    • 谢谢,我刚试过:/dt (asterisk).(asterisk) 有什么不同吗?
    • 我对 /dt(星号).(星号)一无所知,抱歉。我刚刚在 postgres 中运行了 select 查询,它列出了有关其中所有表的信息。尝试运行 select 语句(在您的空白数据库上)并查看它返回的内容。
    • 尝试上面的命令会列出 information_schema 中的以下表:sql_features、sql_implementation_info、sql_languages、sql_packages、sql_parts、sql_sizing、sql_sizing_profiles.....那么这些表和 information_schema 中的表有什么区别。桌子?
    • 您列出的所有表(通过 /dt 命令)都提供有关数据库的元信息。列出的每个表格都显示了不同的信息。因此,例如,information_schema.tables 表列出了数据库中的所有表及其属性(例如能够查看它是表还是视图,名称是什么以及其他类似的信息)。 information_schema.sql_features 表将显示数据库上启用了哪些功能(因此我可以看到我的数据库支持 Embedded C,以及直接 SQL)。
    • 您可以在 dt 命令列出的每个表上运行 select * - 它刚刚向您显示了包含数据库元数据的表列表。
    【解决方案2】:

    要列出您的表格,请使用:

    SELECT table_name FROM information_schema.tables WHERE table_schema='public'
    

    它只会列出您创建的表。

    【讨论】:

    • 您没有创建但您有权访问的表呢?
    • 这将只显示公共模式中的表。您可以在其他模式中创建表。
    • 这也不会区分表和视图。
    【解决方案3】:
    \dt information_schema.
    

    在 psql 中,应该没问题。

    【讨论】:

      【解决方案4】:

      "\z" 命令 也是在交互式 psql 会话中列出表的好方法。

      例如。

      # psql -d mcdb -U admin -p 5555
      mcdb=# /z
                                 Access privileges for database "mcdb"
       Schema |              Name              |   Type   |           Access privileges
      --------+--------------------------------+----------+---------------------------------------
       public | activities                     | table    |
       public | activities_id_seq              | sequence |
       public | activities_users_mapping       | table    |
      [..]
       public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
       public | v_systems                      | view     |
       public | vapp_backups                   | table    |
       public | vm_client                      | table    |
       public | vm_datastore                   | table    |
       public | vmentity_hle_map               | table    |
      (148 rows)
      

      【讨论】:

      • 这不会列出 public 以外的模式中的表。
      【解决方案5】:

      1.从information_schema.tables中获取所有表和视图,包括information_schema和pg_catalog的。

      select * from information_schema.tables
      

      2.获取表和视图属于某个模式

      select * from information_schema.tables
          where table_schema not in ('information_schema', 'pg_catalog')
      

      3.仅获取表(几乎\dt)

      select * from information_schema.tables
          where table_schema not in ('information_schema', 'pg_catalog') and
          table_type = 'BASE TABLE'
      

      【讨论】:

      • 如果你不按 table_type 过滤,你会得到各种各样的对象,比如表和视图混合在一起。
      • where table_schema not in ('information_schema', 'pg_catalog') 到底是干什么用的?
      • @russellhoff 我在第 2 步中确实说过“获取所有表和视图”。
      • @jayarjo 我使用“not in ('information_schema', 'pg_catalog')”来仅获取 USER 表和视图。
      【解决方案6】:

      你也可以用

      select * from pg_tables where schemaname = 'information_schema'
      

      一般而言,pg* 表允许您查看数据库中的所有内容,不受您的权限限制(当然,如果您有权访问这些表)。

      【讨论】:

      • 蒂莫菲,我很抱歉,但不知何故我为你点击了 -1。这是无意的。如果您编辑答案,我想我可以删除我的反对票。
      【解决方案7】:

      对于 postgresql 中的私有模式 'xxx':

      SELECT table_name FROM information_schema.tables 
       WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'
      

      没有 table_type = 'BASE TABLE' ,您将列出表格和视图

      【讨论】:

        【解决方案8】:

        如果你想要一个快速而肮脏的单行查询:

        select * from information_schema.tables

        可以直接在查询工具中运行,无需打开psql。

        (其他帖子建议更好的更具体的 information_schema 查询,但作为一个新手,我发现这个单行查询可以帮助我掌握表格)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-27
          • 1970-01-01
          • 2013-12-31
          • 1970-01-01
          • 2016-12-29
          • 2021-05-11
          相关资源
          最近更新 更多