PostgreSQL学习笔记六:模式SCHEMA

模式(Schema)

PostgreSQL中的模式(Schema)是一个命名的数据库对象集合,包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象,使得同一个数据库中可以包含多个具有相同名称的对象,只要它们位于不同的模式中就不会冲突。

创建模式

创建模式使用CREATE SCHEMA命令。例如:

sql 复制代码
CREATE SCHEMA myschema;

这将创建一个名为myschema的新模式。

默认模式

PostgreSQL为每个新数据库自动创建一个名为public的模式。如果在创建对象时没有指定模式名称,PostgreSQL会将对象放置在此public模式中。

模式搜索路径

在实际应用中,通常会使用不带模式名称的非限定名来引用表,例如staff表而不是完全限定名sales.staff表。当使用名称引用表时,PostgreSQL会使用模式搜索路径来查找表,这是一系列模式的列表。PostgreSQL将访问搜索路径中的第一个匹配的表。如果没有找到匹配项,即使数据库中的其他模式中存在具有相同名称的表,也会返回错误。

模式和权限

默认情况下,用户无法访问他们不拥有的模式中的任何对象。要允许这样做,模式的所有者必须在模式上授予USAGE权限。默认情况下,每个人对public模式都有该权限。

模式的用途

使用模式的原因包括:

  • 允许多个用户使用一个数据库而不会相互干扰。
  • 将数据库对象组织成逻辑组,使它们更易于管理。
  • 第三方应用程序可以放入单独的模式中,因此它们不会与其他对象的名称冲突。

注意事项

  • 模式类似于操作系统级别的目录,但模式不能嵌套。
  • 在SQL标准中,模式内的对象被不同用户拥有的概念是不存在的。此外,一些实现不允许创建与所有者名称不同的模式名称。实际上,在只实现标准中指定的基本模式支持的数据库系统中,模式和用户的概念几乎等同。
  • 默认情况下,如果用户没有指定模式名称,创建对象时会使用当前模式(search path中的第一个模式)。如果在CREATE TABLE命令中没有指定模式名称,新表将被创建在当前模式中。

示例

创建模式:

sql 复制代码
CREATE SCHEMA ecommerce;

删除模式:

sql 复制代码
DROP SCHEMA ecommerce;

或者级联删除模式及其所有引用对象:

sql 复制代码
DROP SCHEMA ecommerce CASCADE;

在模式中创建表:

sql 复制代码
CREATE TABLE ecommerce.customers (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

这些是PostgreSQL模式的基本概念和操作。

模式和数据库中的表有什么区别?

在 PostgreSQL 中,模式(Schema)和表(Table)是两个不同的概念,它们在数据库结构中扮演着不同的角色:

  1. 模式(Schema)

    • 模式是一个命名空间,它包含了一组数据库对象,如表、视图、索引、数据类型、函数和操作符。
    • 模式用于逻辑上组织数据库对象,使得具有相同名称的不同对象可以共存于不同的模式中,从而避免了命名冲突。
    • 模式可以看作是数据库中的一个容器或一个目录,它们包含的对象对于数据库用户来说是透明的。
    • 模式可以提高数据库的组织性,使得管理和访问控制更加方便。
    • PostgreSQL 默认提供了一个名为 public 的模式,用户也可以创建自己的模式。
  2. 表(Table)

    • 表是数据库中存储数据的实际结构,是关系型数据库的基本构建块。
    • 表由行(rows)和列(columns)组成,每一列可以有一个数据类型,每一行代表一个数据记录。
    • 表总是属于某个模式,并且每个模式可以包含多个表。
    • 表是实际存储数据的地方,用户可以通过 SQL 语句对表中的数据进行查询、插入、更新和删除等操作。

区别

  • 逻辑层次:模式是逻辑上的分组,而表是物理上存储数据的结构。
  • 命名空间:模式提供了一个命名空间,可以包含同名的表,这些表在不同的模式中不会冲突。
  • 组织结构:模式用于组织和分类数据库对象,而表则是这些对象中的一种,用于存储具体的数据。
  • 权限管理:模式可以有自己的权限设置,可以控制用户对模式内对象的访问,而表的权限通常是通过模式来继承的。

例如,你可以在一个名为 ecommerce 的模式中创建一个名为 customers 的表,这个表就属于 ecommerce 模式。如果你不指定模式,那么创建的表将默认放在 public 模式中。

相关推荐
做cv的小昊7 分钟前
【TJU】信息检索与分析课程笔记和练习(3)学术评价
大数据·人工智能·经验分享·笔记·学习·全文检索
兜兜转转了多少年11 分钟前
《Prompt Engineering白皮书》笔记08 我用 Gemini 10 分钟写完脚本,100 个文件自动改名
笔记·prompt
杨了个杨898221 分钟前
PostgreSQL(pgSQL)常用操作
数据库·postgresql·oracle
慕白Lee28 分钟前
【PostgreSQL】日常总结
数据库·postgresql
重生之我在番茄自学网安拯救世界39 分钟前
网络安全中级阶段学习笔记(九):upload靶场实战(14-16关)-图片马制作与通过教学
笔记·学习·网络安全·文件上传漏洞·图片木马
Lv11770081 小时前
Visual Studio中的静态成员
笔记·c#·visual studio
RanceGru1 小时前
LLM学习笔记7——unsloth微调Qwen3-4B模型与vllm部署测试
人工智能·笔记·学习·语言模型·vllm
deng-c-f1 小时前
Linux C/C++ 学习日记(57):定时器
学习
中屹指纹浏览器1 小时前
2025技术解析:联邦学习驱动的指纹特征协同优化技术实现
经验分享·笔记
楠了个难1 小时前
安服优-B-1 人体红外测温传感器——ZYNQ学习笔记23
笔记·学习