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

为什么所有数据库在PostgreSQL中都有公共模式?,postgresql,Postgresql,我只是好奇为什么PostgreSQL中的所有数据库都有一个可供所有用户访问的public模式。我知道我可以撤销特权并将其授予一个用户,但为什么这不是默认设置?我猜应该是SQL规范。但是,这是相当合乎逻辑的,如果创建用户不这样做,则要求您显式说明用户也可以访问哪个架构 如果您的用户无法访问任何单个共享资源,为什么不为他们创建一个新的数据库呢?与MySQL不同,新数据库是新数据库,而不是新模式的别名 我只是想澄清一下,这意味着每个数据库都有自己的public.schema.没有给出太多理由,但请参见

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

我猜应该是SQL规范。但是,这是相当合乎逻辑的,如果
创建用户
不这样做,则要求您显式说明用户也可以访问哪个架构

如果您的用户无法访问任何单个共享资源,为什么不为他们创建一个新的数据库呢?与MySQL不同,新数据库是新数据库,而不是新模式的别名


我只是想澄清一下,这意味着每个数据库都有自己的
public.
schema.

没有给出太多理由,但请参见手册中的部分,但我认为以下内容回答了您的问题:

如果不创建任何模式,则所有用户都会隐式访问公共模式。这模拟了模式完全不可用的情况。当数据库中只有一个用户或几个合作用户时,主要建议使用此设置。此设置还允许从非模式感知世界平滑过渡


我不认为这是因为SQL规范:“SQL标准中没有公共模式的概念。”@CarlG但它允许您在不了解模式的情况下使用DB,这是其他引擎的工作方式(因为它们根本没有模式)。@ElliotCameron Oracle有模式,它使用模式与用户同义;用户可以获得自己的模式,也可以共享模式。Microsoft SQL Server有模式(Sybase也有),默认名为
dbo
相当于PostgreSQL中的
public
,如果不指定模式,则默认为
dbo
。IBM的DB2也有模式。MySQL的同义词是
schema
,可以与
database
互换,因此在前面提到的其他模式中,MySQL并不是真正的模式。