PostgreSQL – 架构
在 PostgreSQL 中,模式是一个命名空间,其中包含命名的数据库对象,例如表、视图、索引、数据类型、函数和运算符。
要访问架构的对象,用户需要使用架构名称作为前缀来限定其名称,如下所示:
Syntax: schema_name.object_name
一个数据库可以包含一个或多个模式,而每个模式只属于一个数据库。两个模式可以具有共享相同名称的不同对象。例如,你可能有sales
,有一个架构staff
表和公共模式也有staff
表。当您参考staff
表时,您必须对其进行如下限定:
public.staff
or,
sales.staff
有多种需要使用模式的场景:
- 模式允许用户将数据库对象(例如,表)组织成逻辑组,以使其更易于管理。
- 模式使多个用户可以使用一个数据库而不会相互干扰。
公共模式
PostgreSQL 为所有数据库生成一个名为public
的模式。无论用户在没有指定模式名称的情况下创建什么对象,PostgreSQL 都会自动将其放入这个public
模式中。因此,以下语句是相等的:
CREATE TABLE table_name(...);
and
CREATE TABLE public.table_name(...);
架构和特权
用户只能访问他们拥有的架构中的对象。这意味着他们无法访问架构中不属于他们的任何对象。要使用户能够访问他们不拥有的架构中的对象,您必须向架构上的用户授予 USAGE 权限,如以下语句所示:
GRANT USAGE ON SCHEMA schema_name TO user_name;
要允许用户在他们不拥有的架构中创建对象,您需要授予他们对该架构的 CREATE 权限。
GRANT CREATE ON SCHEMA schema_name TO user_name;
注意:默认情况下,每个用户在公共架构上都有 CREATE 和 USAGE。
模式操作
PostgreSQL 允许以下操作:
- 要创建新模式,请使用 CREATE SCHEMA 语句。
- 要重命名架构或更改其所有者,请使用 ALTER SCHEMA 语句。
- 要删除模式,请使用 DROP SCHEMA 语句。