【问题标题】:Does PostgreSQL manages tables inside tables?PostgreSQL 是否管理表内的表?
【发布时间】:2022-01-26 14:03:09
【问题描述】:

我被分配了在一个类中创建一个简单的数据库管理系统的任务,所以我查找了 Postgres 并注意到 CLI 工具 (psql) 具有输出有关数据库和列的信息的命令 (\d 和 \l)表格形式的表格,就像您执行 SELECT 时一样。所以我的问题是如果 Postgres 管理系统表中的用户表?这样,当您执行 \d 或 \l 时,您实际上是在对这些系统表执行 SELECT 。这只是为了了解这是否是管理数据库中表的好方法,并且只使用列表等常规数据结构。

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    确实如此。您可以使用-E 运行 psql 以查看它正在使用的查询。

    然后检查online manuals 要搜索的项目是“系统目录”和“INFORMATION_SCHEMA”。后者是描述数据库模式的标准方式,应该主要在不同的 RDBMS 之间工作。

    【讨论】:

    • 谢谢!我不知道那个标志
    【解决方案2】:

    是的,Postgres 使用它创建的表来管理您创建的表。

    说明文档中有an entire chapter。引用:

    系统目录是关系数据库管理系统存储架构元数据的地方,例如有关表和列的信息以及内部簿记信息。 PostgreSQL 的系统目录是常规表。

    other Answer 中所述,SQL 标准要求在标准中定义的某些表结构中提供元数据。这些必须位于完全命名为INFORMATION_SCHEMA 的模式中。 Postgres 提供该模式及其规定的表,但在实际系统表上将它们实现为view。请参阅 Postgres 文档中的 chapter on INFORMATION_SCHEMA

    您可以访问元数据,例如获取您已定义的所有表的列表,或获取您在特定表中定义的所有列的列表。为此,请像任何其他查询一样使用SELECT 在 SQL 中执行查询。

    • 为了可移植性,即编写可在除 Postgres 之外的其他数据库系统中运行的代码,请查询 INFORMATION_SCHEMA
    • 有关 SQL 标准不需要的其他详细信息以及特定于 Postgres 的信息,请查询特定于 Postgres 的系统表。他们的名字都以pg_开头。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多