PostgreSQL中的模式(schema)

1,753 阅读2分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

什么是模式

在PostgreSQL中,模式也称为命名空间。它用于识别和区分数据库中的某些对象(表、视图、列等)。它不允许在一个模式中创建两个同名的表,但可以在两个不同的模式中创建同名的表。例如,我们可以在public和postgres模式中分别存在两个名为table1的表。

为什么要使用模式?

模式存在的目的是将数据库对象组织成一个个的逻辑组,并避免名称之间的冲突。除此之外,模式通常用于允许不同的用户在不相互干扰的情况下使用同一个数据库。一个常见的例子是,当每个数据库用户都使用自己的架构时,不会干扰其他用户并避免冲突。 简单来说就是把一个数据库逻辑上分割成不同的区域。

创建模式

在PostgreSQL中创建新数据库后,默认架构是public。可以通过执行如下命令来创建新模式:

create schema schema1;

如果想将模式直接创建给某些用户,我们使用如下命令。

CREATE SCHEMA schema1 AUTHORIZATION username1;

而不是使用这种语法

CREATE SCHEMA schema1 OWNER username1;

那创建表到指定的schema下,一个标准的用法是模式名加“.”加表名。 例如:

create table schema1.t_info (id int);

如果不加特定限制,通常是将表建立到默认的public模式下。

create table t_info (id int);

如果想在不显示限定模式的情况下调用指定schema,则可以通过设置search_path参数来控制。 查询命令:

postgres=# show search_path ;
    search_path     
--------------------
 "$user", public
(1 row)

这是默认值。
如果我们想优先调用schema1模式。
可以执行如下命令:

SET search_path TO schema1,public;

这样再执行创建表的语句后,该表将被创建到schema1模式下。

删除模式

如果是个空的模式,剋通过如下命令删除。

DROP SCHEMA schema1;

如果schema中有对象,则需要级联删除。

DROP SCHEMA schema1 cascade;