为什么所有数据库在PostgreSQL中都有一个公共模式?

ix0qys7i  于 11个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(124)

我只是好奇为什么PostgreSQL中的所有数据库都有一个public模式,所有用户都可以访问。我知道我可以撤销特权并将其授予一个用户,但为什么这不是默认值?

huwehgph

huwehgph1#

没有给出太多的理由,但请参阅手册中的[5.9.6][1]节,但我认为以下内容回答了您的问题:
如果您不创建任何模式,则所有用户都会隐式访问公共模式。这模拟了模式完全不可用的情况。当数据库中只有单个用户或几个合作用户时,建议使用此设置。此设置还允许从非模式感知世界平滑过渡。

7jmck4yq

7jmck4yq2#

public schema的概念出现在7.3版本,当时在PostgreSQL中出现了schema的概念。并且需要支持向后兼容性。因此,public schema在任何地方都是不可见的。可能其他任何东西都不再需要public schema,可以将其删除。https://severalnines.com/database-blog/postgresql-privileges-and-security-locking-down-public-schema

svmlkihl

svmlkihl3#

我猜是SQL规范。但是,这是相当合乎逻辑的,否则create user会做什么,需要你显式地说用户也可以访问什么模式?
如果你的用户不能访问任何一个共享资源,为什么不为他们创建一个新的数据库呢?与MySQL不同,一个新的数据库就是一个新的数据库,而不是一个新模式的别名。
我只是想澄清这一点,这意味着每个数据库都有自己的public.模式。

相关问题