如何在 postgresql 中显示目录和模式?

Tim*_*Tim 0 postgresql

来自/sf/answers/1256071841/

在 Postgres 和 SQL 标准中,我们都有这样的包含层次结构:

  • 一台计算机可能有一个或多个集群。
  • 数据库服务器是一个集群
  • 一个集群有[目录][8]。(目录 = 数据库)
  • 目录有[schemas][9]。(Schema = [namespace][10] of tables,和安全边界)
  • 模式有 [][11]。
  • 表有 [][12]。
  • 行有,由[][13]定义。

在 postgresql 中,我有一个名为的数据库students,下面有一个名为的表student

postgres=# \c students
You are now connected to database "students" as user "postgres".
students=# \dt;
 public | student | table | postgres
Run Code Online (Sandbox Code Playgroud)

我想知道数据库students是否也是目录?

students和之间的模式在哪里student

一般来说,我如何列出

  • 所有目录和
  • 目录下的所有模式,以及
  • 架构下的所有表?

我怎样才能显示

  • 当前目录,以及
  • 当前模式?

谢谢。

Mab*_*sen 6

很快,我通常会在我的初级队友开始研究 PostgreSQL 时向他们解释。

在 PostgreSQL 中:

  • 一个数据库服务器就像一个工业区,会有很多数据库-集群(建筑)
  • 每个Database-Cluster(Building)都有很多Database。那些就像大楼里的地板一样。当您调用目录时,数据库就在这里。那些Databases-Catalogs(楼层)之间是相当独立的,不能直接使用别人的材料,必须使用楼梯、电线……(数据库里面是DBLINK)。
  • 好的,接下来,每个 Database-Catalogs 都有许多 Schemas,就像您楼层上的许多 Room。这些模式可以使用彼此的材料。
  • 然后,每个 Schemas 都有许多单元元素,例如 Table、View、Function、Sequence...。所有 Schemas 都具有相同的结构。

现在,回到你的例子:

  • 学生:是数据库(你称之为目录)
  • 公共:是模式。
  • 学生:是桌子。

public | student | table | postgres 对应于 schema | table | kind of table | owner of table

你可以列出:

  • 通过\lpsql 或 query 中的命令创建目录(数据库)select * from pg_database;
  • 目录下的模式通过\dnpsql 或 query 中的命令select * from information_schema.schemata;
  • 查询模式下的表 select * from pg_tables WHERE schemaname = 'Your schema';

您可以显示:

  • 查询的当前数据库(目录) select current_database();
  • 查询的当前架构 select current_schema;

请注意,PostgreSQL 有两个系统模式调用 information_schema 和 pg_catalog,这可能会让您感到困惑。

pg_catalog 是一个系统模式。更多信息

系统目录是关系数据库管理系统存储模式元数据的地方,例如有关表和列的信息以及内部簿记信息。PostgreSQL 的系统目录是常规表。您可以删除和重新创建表、添加列、插入和更新值,并以这种方式严重弄乱您的系统。通常,不应手动更改系统目录,总有 SQL 命令可以做到这一点。(例如, CREATE DATABASE 在 pg_database 目录中插入一行——实际上是在磁盘上创建数据库。)对于特别深奥的操作有一些例外,例如添加索引访问方法。

information_schema 是一个系统模式。更多信息

信息模式由一组视图组成,这些视图包含有关当前数据库中定义的对象的信息。信息模式在 SQL 标准中定义,因此可以预期是可移植的并保持稳定——与系统目录不同,系统目录特定于 PostgreSQL 并在实现问题后建模。然而,信息模式视图不包含有关 PostgreSQL 特定功能的信息;查询那些您需要查询系统目录或其他 PostgreSQL 特定视图的内容。

我希望这些信息能帮助你清楚。