来自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
是否也是目录?
students
和student
之间的架构在哪里?
一般来说,我如何列出
我该如何显示
感谢。
答案 0 :(得分:2)
很快,我通常会向我的初级队友解释他们开始研究PostgreSQL的问题。
在PostgreSQL中:
现在,回到你的例子:
public | student | table | postgres
与schema | table | kind of table | owner of table
您可以列出:
\l
或查询select * from pg_database;
\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特定视图的人。
我希望这些信息可以帮助您清楚。