模式(Schema)
PostgreSQL 中的模式(schema)是什么?
模式是数据库内部的命名空间,用于存放表、视图、函数和其他对象。search_path 决定在哪里查找未限定的名称。
一个 PostgreSQL 数据库包含一个或多个模式,每个模式包含表和其他命名对象。同一个表名可以存在于不同的模式中,你可以用 schema.table 的形式引用对象。每个新数据库都有一个名为 public 的模式。
模式可以将相关对象归为一组,让多个用户或应用程序共享一个数据库而不会发生名称冲突,并让权限管理更加方便。未限定的名称通过 search_path 解析,默认先查找与当前用户同名的模式,然后查找 public。从 PostgreSQL 15 开始,普通用户默认不能再在 public 中创建对象。
示例
该示例创建一个 billing 模式,在其中放入一张表,并修改 search_path,使该表无需加模式名即可使用。
CREATE SCHEMA billing;
CREATE TABLE billing.invoices (id int PRIMARY KEY);
SHOW search_path;
SET search_path TO billing, public;
SELECT count(*) FROM invoices;
RESET search_path;适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。
参考资料
PostgreSQL 官方文档(英文)。