PostgreSQL学习笔记六:模式SCHEMA

server/2024/10/17 17:55:41/

模式(Schema)

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

在这里插入图片描述

创建模式

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

CREATE SCHEMA myschema;

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

默认模式

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

模式搜索路径

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

模式和权限

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

模式的用途

使用模式的原因包括:

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

注意事项

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

在这里插入图片描述

示例

创建模式:

CREATE SCHEMA ecommerce;

删除模式:

DROP SCHEMA ecommerce;

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

DROP SCHEMA ecommerce CASCADE;

在模式中创建表:

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 模式中。


http://www.ppmy.cn/server/132548.html

相关文章

2024双十一值得购买的好物有哪些?看完这五款好物让你不后悔!

随着一年一度的双十一购物狂欢节即将拉开帷幕,作为一名热衷于分享购物心得的博主,我今天特别想在这里为大家详细介绍五款我个人非常期待入手的好物。这些产品都是经过我精心挑选和试用的,我相信它们不仅能够满足我的需求,同样也能…

数字后端零基础入门系列 | Innovus零基础LAB学习Day1

一 Floorplan 数字IC后端设计如何从零基础快速入门?(内附数字IC后端学习视频) Lab5-1这个lab学习目标很明确——启动Innovus工具并完成设计的导入。 在进入lab之前,我们需要进入我们的FPR工作目录。 其中ic062为个人服务器账户。比如你端…

【LeetCode】每日一题 2024_10_16 最小元素和最大元素的最小平均值(排序、模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:最小元素和最大元素的最小平均值 连续两天的简单题了,我有预感,明天的每日一题估计要来大的了 代码与解题思路 今天的题目算是标准的简单模拟题, 需要…

985研一学习日记 - 2024.10.17

一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部,明天练胸和三头 3、LeetCode刷了3题 旋转图像&#xff1a…

西门子网络程序传输,无需开通网络驱动器直接接入底层,支持各类数控 如发那科、三菱 、新代、海德汉、广数、精雕、马扎克等等

有关西门子的程序传输问题,大家一般是通过文件共享、ftp、网络驱动器等方式,其中828D还需要授权开通网络启动器 下面介绍一种方式直接进入西门子Linux底层系统实现和NCK的文件交互功能 软件截图如下 功能表如下 机床程序上载至电脑 电脑程序下传…

Chromium html<script>对应c++接口定义

<script>&#xff1a;脚本元素 <script> 元素用于嵌入可执行代码或数据&#xff0c;这通常用作嵌入或者引用 JavaScript 代码。<script> 元素也能在其他语言中使用&#xff0c;比如 WebGL 的 GLSL 着色器语言和 JSON。 更多参考&#xff1a;<script>&…

01数组算法/代码随想录

一、数组 好久没写算法题&#xff0c;之前喜欢按着习惯选择刷题&#xff0c;很早以前就听说代码随想录&#xff0c;今天跟着代码随想录再过一遍算法 1.1二分查找 常见疑问 middle一定是在[left, right]这个范围内标准代码不会越界&#xff0c;因为在else if中出现越界后&…

自由学习记录(6)

单例为何存在 静态类不能继承其他类&#xff0c;也不能被继承&#xff0c;这是静态类的一个限制。静态类的设计初衷是为了提供一组与对象无关的工具或功能&#xff0c;因此它没有对象实例的概念&#xff0c;这也意味着不能利用面向对象中的继承和多态特性。 为什么不能继承静…