一、概念介绍
PostgreSQL的 模式 (SCHEMA) 是一个非常重要且强大的概念,它本质上是数据库内部的命名空间 或目录,用于组织和管理数据库对象(如表、视图、函数、索引等)。
PostgreSQL 的模式是一个强大的逻辑隔离和组织工具。它超越了简单的"数据库用户"概念,提供了更精细的命名空间管理。正确使用模式可以让你的数据库结构更清晰、更安全、更易于维护,也是实现中型多租户应用的理想选择。
默认模式: 每个数据库创建时都会自动生成一个名为 public 的模式。如果未指定模式,对象默认创建在此处。
相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。
使用模式的优势:
-
允许多个用户使用一个数据库并且不会互相干扰。
-
将数据库对象组织成逻辑组以便更容易管理。
-
第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。
二、创建模式
2.1语法
我们可以使用 CREATE SCHEMA语句来创建模式,语法格式如下:
sql
CREATE SCHEMA myschema (
...
);
上述语句将创建一个名为 myschema 的模式。
模式通常用于组织和隔离数据库对象,防止对象名称冲突。
创建表(Table)使用 CREATE TABLE 语句:
sql
CREATE TABLE myschema.mytable (
column1 datatype1,
column2 datatype2,
...
);
上述语句将在 myschema 模式下创建一个名为 mytable 的表,并定义了一系列的列及其数据类型。
请注意,上述的 datatype1, datatype2 等应该被替换为实际的数据类型,例如 integer, varchar(255), 等等。
2.2使用 psql 命令行工具
sql
-- 连接到数据库
psql -U username -d database_name
-- 创建 schema
CREATE SCHEMA schema_name;
-- 创建 schema 并指定所有者
CREATE SCHEMA schema_name AUTHORIZATION owner_name;
-- 如果不存在则创建
CREATE SCHEMA IF NOT EXISTS schema_name;
2.3使用 pgAdmin 图形界面
sql
连接到数据库
右键点击 "Schemas" → "Create" → "Schema"
填写 schema 名称和所有者
点击 "Save"
2.4创建带有权限控制的 schema
sql
-- 创建 schema
CREATE SCHEMA myschema;
-- 授权给用户
GRANT USAGE ON SCHEMA myschema TO username;
-- 授予所有权限
GRANT ALL ON SCHEMA myschema TO username;
-- 允许用户在该 schema 中创建对象
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT ALL ON TABLES TO username;
三、删除模式
删除一个为空的模式(其中的所有对象已经被删除):
sql
DROP SCHEMA myschema;
删除一个模式以及其中包含的所有对象:
sql
DROP SCHEMA myschema CASCADE;
四、修改模式
sql
-- 修改 schema 名称
ALTER SCHEMA old_name RENAME TO new_name;
-- 修改 schema 所有者
ALTER SCHEMA schema_name OWNER TO new_owner;
五、查询模式
sql
-- 查看所有 schema
\dn
-- 查看 schema 详细信息
\dn+
五、注意事项
- PostgreSQL 默认有一个 public schema
- 每个数据库可以有多个 schema
- 不同 schema 中的对象名可以相同
- 使用 search_path 来控制对象查找顺序
- 生产环境中建议为不同应用或模块使用不同的 schema 进行隔离
参考文件:https://www.runoob.com/postgresql/postgresql-schema.html