浅谈PostgreSQL 模式(SCHEMA)

一、概念介绍

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

相关推荐
silvamux_1 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl3 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒3 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB3 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB4 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB4 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
AI开源软件5 小时前
SpringBoot信创项目怎么验收?从数据库迁移到交付证据
postgresql·springboot·达梦·opengauss·信创·企业管理系统
pjj198546 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse
1024奇点6 小时前
【仓颉语言入门 · 第二篇 第 12 课】
开发语言·数据库·ide·mysql·开源
冰暮流星6 小时前
mysql之insert优化
数据库·mysql