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

时间:2018-01-18 01:53:50

标签: postgresql

来自https://stackoverflow.com/a/17943883/156458

  

在Postgres和SQL Standard中都有这个包含   层次结构:

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

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

postgres=# \c students
You are now connected to database "students" as user "postgres".
students=# \dt;
 public | student | table | postgres

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

studentsstudent之间的架构在哪里?

一般来说,我如何列出

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

我该如何显示

  • 当前目录和
  • 当前架构?

感谢。

1 个答案:

答案 0 :(得分:2)

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

在PostgreSQL中:

  • 数据库服务器就像一个工业区,会有很多数据库 - 集群(建筑物)
  • 每个数据库群集(建筑物)都有许多数据库。这些就像建筑物的地板。在您调用目录时,数据库就在这里。那些数据库 - 目录(楼层)相互独立,你不能直接使用其他材料,你必须像楼梯,电线一样使用东西......(在数据库中是DBLINK)。
  • 好的,接下来,每个数据库目录都有许多模式,就像您楼层上的许多房间一样。那些架构可以使用彼此的材料。
  • 然后,每个Schemas都有许多单元格元素,如Table,View,Function,Sequence ....所有模式都具有相同的结构。

现在,回到你的例子:

  • 学生:是数据库(您称之为目录)
  • public:是架构。
  • 学生:是桌子。

public | student | table | postgresschema | table | kind of table | owner of table

对应

您可以列出:

  • psql中的命令\l或查询select * from pg_database;
  • 中的目录(数据库)
  • psql中的命令\dn下的目录下的架构或查询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是一个系统架构。 More information

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

information_schema是系统架构。 More information

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

我希望这些信息可以帮助您清楚。

相关问题