# PostgreSQL 的对象层次

**URL:** <https://www.isharkfly.com/t/postgresql/15347>\
**Category:** 数据库\
**Tags:** postgresql\
**Created:** [January 19, 2024, 10:36pm UTC](https://www.isharkfly.com/t/postgresql/15347 "2024-01-19T22:36:25Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [January 19, 2024, 10:36pm UTC](https://www.isharkfly.com/t/postgresql/15347/1 "2024-01-19T22:36:25Z")

</div>

所有的数据库离开数据量来谈性能都是耍流氓。

就你那几万条的数据库，用啥都行，典型的就是怎么方便怎么来。

不过 PostgreSQL 上手确实比 MySQL 概念更多。

PostgreSQL 比 MySQL 多了一层。

PostgreSQL 是从PostgreSQL 是从 Database，到 Schema 再到 Table

MySQL 就直接从 Database 到表了。

## Schema

这个单词的翻译有点乱七八糟，有些人会翻译成模式。

其实数据库中，这个单词被翻译成命名空间多一些。

因为 PostgreSQL 比 MySQL 多了一个命名空间（Schema）那么去找对应的话，就有点困惑不知道 Schema 对应的是 MySQL 的是什么了。

其实 Schema 对应的就是 MySQL 的数据库。

 ![2024-01-19_17-26-45](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/7/7ea95139a7a8eecc60b106fcad52e34f045936ba.png)

PostgreSQL 的一个数据库就 MySQL 在机器上安装的整个实例了。

## 数据互访

比如说 PostgreSQL 有 2 个数据库 DB0 和 DB1，那么对应 MySQL 就是需要有 2 个实例，这 2 个实例对应的 MySQL 需要运行在不同的端口中。

## PostgreSQL 互通性

PostgreSQL 的数据库定义的对饮 MySQL 的 2 个实例的话，那么在实例之间进行数据通信是比较困难的。

同样的，PostgreSQL 也是这样的，PostgreSQL 的数据库是互相独立的，是不能互相访问的。

PostgreSQL 的 Schema 在不同的命名空间中的数据是可以互相访问的。

不同命名空间中的表名字可以完全一致。

比如说我们有2个命名空间分别为 S1和 S2，但这 2 个命名空间中都有一个相同名称的表叫做 T1和T1，这个是可以存在的。

## 总结

因为 PostgreSQL 对比 MySQL 多了一层逻辑结构，所以 PostgreSQL 比 MySQL 的理解上面更加复杂，同时用户的授权也更加麻烦。

这也就是为什么很多人拿到 PostgreSQL 开始的时候都不知道表在哪里。
