PostgreSQL Schema管理基础

news2025/1/10 16:21:55

Postgresql schema是什么、为什么它们很重要以及如何使用schema(模式)使您的数据库实现更加健壮和可维护?本文将介绍 Postgresql 中schema的基础知识,并通过一些基本示例向您展示如何创建它们。未来的文章将深入探讨如何保护和使用实际应用程序schema的示例。
首先,为了消除潜在的术语混淆,让我们了解一下,在 Postgresql 世界中,“schema”一词可能不幸地被过度使用了。在关系数据库管理系统 (RDBMS) 的更广泛背景下,“schema”一词可能被理解为指数据库的整体逻辑或物理设计,即构成数据库定义的所有表、列、视图和其他对象的定义。在这种广义背景下,schema 可以通过实体关系(ER)图或用于实例化应用数据库的DDL语句脚本来表达。
“什么是命名空间?” 通常,命名空间是一种通过名称,组织和识别信息的相当灵活的方式。例如,想象两个相邻的家庭,Smith家有Alice和Bob,Jones家有Bob和Cathy(参见图1)。如果我们只使用名字,当谈论Bob时可能会弄不清楚指的是哪一个人。但通过添加姓氏Smith或Jones,我们可以唯一地确定我们指的是哪一个人

在这里插入图片描述

命名空间通常组织成嵌套的层次结构。这允许将大量信息高效地分类到非常细粒度的结构中,例如互联网域名系统。在顶层,“.com”、“.net”、“.org”、“.edu”等定义了广泛的命名空间,在这些空间内注册了特定实体的名称,例如“severalnines.com”和“postgresql.org”被唯一定义。但在每一个这些顶层域名之下,还有许多常见的子域名,例如“www”、“mail”和“ftp”等,这些子域名单独来看是重复的,但在各自的命名空间内是唯一的。
PostgreSQL 中的 schema 具有组织和识别的作用,但与前面的第二个例子不同,PostgreSQL 的 schema 不能嵌套在层次结构中。虽然一个数据库可以包含许多 schema,但它们只有一个层次结构,因此在一个数据库中,schema 名称必须是唯一的。此外,每个数据库必须至少包含一个 schema。每当新数据库被创建时,都会创建一个名为 “public” 的默认 schema。一个 schema 的内容包括所有其他数据库对象,如表、视图、存储过程、触发器等。为了形象化,请参考图2,它展示了类似俄罗斯套娃的嵌套结构,显示了 schema 在 PostgreSQL 数据库结构中的位置。
在这里插入图片描述
除了简单地将数据库对象组织成逻辑组以便更易管理之外,schemas 还具有避免名称冲突的实际用途。一种操作范式是为每个数据库用户定义一个 schema,以提供一定程度的隔离,使用户可以在各自的空间中定义自己的表和视图而不相互干扰。另一种方法是将第三方工具或数据库扩展安装在单独的 schema 中,以便将所有相关组件逻辑地集中在一起。本系列的后续文章将详细介绍一种新的稳健应用设计方法,使用 schemas 作为间接手段,限制数据库物理设计的暴露,而是呈现一个用户界面,解决合成键并促进系统需求演变中的长期维护和配置管理。
在数据库中创建schema的最简单命令是

CREATE SCHEMA hollywood;

此命令需要数据库中的create权限,新创建的 schema “hollywood” 将由调用该命令的用户拥有。更复杂的调用可能包括指定不同所有者的可选元素,甚至可以在一个命令中包含创建schema 内数据库对象的 DDL 语句!
一般格式是:

CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ]

“username” 是 schema 的所有者,“schema_element” 可以是某些 DDL 命令之一(具体参考 PostgreSQL 文档)。使用 AUTHORIZATION 选项需要超级用户权限。
例如,要在一个命令中创建一个名为 “hollywood” 的 schema,并在其中包含一个名为 “films” 的表和一个名为 “winners” 的视图,可以这样做:

CREATE SCHEMA hollywood
    CREATE TABLE films (title text, release date, awards text[])
    CREATE VIEW winners AS
        SELECT title, release FROM films WHERE awards IS NOT NULL;

随后可以直接创建额外的数据库对象,例如,将使用以下命令将附加表添加到schema中:

CREATE TABLE hollywood.actors (name text, dob date, gender text);

请注意,在上面的例子中,表名以 schema 名称作为前缀。这是必需的,因为默认情况下,如果没有明确指定 schema,新创建的数据库对象会位于当前的 schema 中,我们将在接下来讨论这个问题。

回想一下上面第一个命名空间例子,我们有两个名叫 Bob 的人,我们通过加入姓氏来区分他们。但是在 Smith 和 Jones 各自的家庭中,每个家庭成员都知道 “Bob” 指的是他们家庭中的那位。所以在各自的家庭背景下,Alice 不需要称呼她的丈夫为 Bob Jones,而 Cathy 也不需要称呼她的丈夫为 Bob Smith:她们都可以直接称呼为 “Bob”。
PostgreSQL 的当前 schema 就像上面的家庭。在当前 schema 中的对象可以不加限定地引用,但引用其他 schema 中的同名对象时需要在名称前加上 schema 名称作为前缀。
当前的 schema 是由 search_path 配置参数决定的。这个参数存储了以逗号分隔的 schema 名称列表,可以使用以下命令查看:

SHOW search_path;

或设置新的值

SET search_path TO schema [, schema, ...];

列表中的第一个 schema 名称是“当前 schema”,如果没有指定 schema 名称,新对象会在该 schema 中创建。
这个以逗号分隔的 schema 名称列表还用于确定系统定位现有未限定名称对象的搜索顺序。例如,回到 Smith 和 Jones 的社区,如果一个包裹的收件人只写着“Bob”,那么送货员需要逐个拜访每家,直到找到第一个名为 “Bob” 的居民。注意,这可能不是预期的收件人。同样的逻辑适用于 PostgreSQL。系统按照 search_path 的顺序在 schema 中搜索表、视图和其他对象,然后使用第一个找到的名称匹配对象。具有 schema 限定名称的对象直接使用,而不参考 search_path。
在默认配置中,查询 search_path 配置变量会显示以下值:

SHOW search_path;
 Search_path
--------------
 "$user", public

系统将上述显示的第一个值解释为当前登录用户名,并适应之前提到的一种使用情况,即为每个用户分配一个以其用户名命名的schema,用于与其他用户分开的工作空间。如果没有创建这样的以用户命名的schema,则忽略该条目,并且“public” schema将成为创建新对象时的当前schema。

因此,回到我们之前创建“hollywood.actors”表的例子,如果我们没有使用schema名称限定表名,那么该表将在public schema中创建。如果我们预期在特定schema中创建所有对象,那么设置search_path变量可能会很方便,例如:

SET search_path TO hollywood,public;

还有一个系统信息功能,可以通过查询返回当前的schema。

select current_schema();

在拼写错误的情况下,schema的所有者可以更改名称,前提是用户也具有数据库的创建权限,并且.

ALTER SCHEMA old_name RENAME TO new_name;

最后,要从数据库中删除架构,可以使用 drop 命令

DROP SCHEMA schema_name;

如果架构包含任何对象,则 DROP 命令将失败,因此必须先删除它们,或者您可以选择使用 CASCADE 选项递归删除架构的所有内容

DROP SCHEMA schema_name CASCADE;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[linux]基于Ubuntu24.04原内核6.8.0升级到6.9.0

物理机操作系统: 虚拟机操作系统: Ubuntu 24.04 下载地址: https://mirror.nju.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso VM版本信息: 内核源代码来源: https://ftp.sjtu.edu.cn/sites/ftp.kern…

Open vSwitch 守护进程的 upcall 处理(re)

一、upcall 消息的类型 在 Open vSwitch 的数据包转发流程中,如果数据包在内核空间无法完全处理(比如匹配不到流表项),就会发生 upcall 调用,将数据包从内核空间的 Datapath 模块传输至用户空间的 ovs-vswitchd 守护进…

Mybatis源码解读

MyBatis是我们工作中常见的ORM持久层框架,对于MyBatis并不能仅仅局限于会使用的阶段,更需要了解它的工作原理,想要了解原理,源码是必须要读的,这篇文章是我个人在阅读MyBatis的源码过程中的一些简单的总结,…

过孔开窗、过孔盖油、过孔塞油、过孔塞树脂的比较

一、过孔开窗、过孔盖油、过孔塞油、过孔塞树脂的比较: 过孔开窗是指过孔的焊环上面裸露,不盖油墨。如果做表面处理喷锡的话,焊环这里就类似于贴片焊盘上锡,可以用来焊接作用。 过孔盖油指的是via过孔的焊环上面不裸露,覆盖油墨,为避免板子使用时有短路等情况。

霍尼韦尔落地灯好用吗?书客、霍尼韦尔、柏曼护眼大路灯对比较量!

我们都知道光线无处不在,想要减少近视隐患,就不得不提一下护眼灯了,特别是经常坐在电脑前码字的上班族以及深夜还在学习的学生党这一类人群,经常用眼光线不好不仅影响视力健康,还会影响效率。而一款护眼灯能够提供柔和…

人工智能术语

1、人工智能的概念 人工智能概念,在1956年召开的达特茅斯会议上正式被提出。该会议是由信息学鼻祖克劳德.艾尔伍德.香农(ClaudeElwoodShannon)以及马文.明斯基(Marvin Minsky)、约翰.麦卡锡(JohnMcCarthy)等十位信息学、数学、计算机学的科学先驱,在美国…

红黑树的基本原理

目录 一.概念与性质 二.基本操作 1.建树 2.插入 情况一 情况二 3.查找 4.验证 三.红黑树与AVL树的比较 一.概念与性质 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根…

构建大语言模型友好型网站

以大语言模型为代表的AI 技术迅速发展,将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代,主要是通过网站(website)提供信息。网站主要为人类阅读的方式构建的。主要…

✊构建浏览器工作原理知识体系(网络协议篇)

🌻 前言 书接上回~ 系列文章目录: # ✊构建浏览器工作原理知识体系(开篇)# ✊构建浏览器工作原理知识体系(浏览器内核篇)# ✊构建浏览器工作原理知识体系(网络协议篇)✊构建浏览器工作原理知识体系(网页加载超详细全过程篇)为什么你觉得偶尔看浏览器的工作原理,…

【稳定检索/投稿优惠】2024年艺术、语言与文化交流国际会议(ALCE 2024)

2024 International Conference on Art, Language, and Cultural Exchange 2024年艺术、语言与文化交流国际会议 【会议信息】 会议简称:ALCE 2024 截稿时间:点击查看 大会地点:中国桂林 会议官网:www.icalce.com 会议邮箱&#…

重生奇迹mu套装掉的地点一览

1、目前只有三个地方掉套装:赤色要塞,不是100%掉,靠运气。卡利玛7,杀困顿能掉。魔炼之地,只有城主盟成员可以进入。 2、只有攻城城主盟可以进入的地图“魔炼之地”掉套装,暴率几乎为0。如果你是敏法的话&am…

深圳宝安餐饮行业揭秘:可燃气体报警器校准方法与周期的重要性

在日益注重餐饮安全的今天,深圳宝安区的餐饮行业也在不断探索和实践更加有效的安全管理措施。其中,可燃气体报警器的使用与校准成为了保障餐饮场所安全的重要一环。 在这篇文章中,佰德将详细解析可燃气体报警器的重要性、深圳宝安餐饮现状、…

LLM定制的四个层次

LLM(Large Language Models)代表了一种提高生产力的创新方法。他们能够简化各种任务,显著提高整体效率。从提示工程到Agents可以分为四个层次。 Level-1: Prompt engineering Prompt是简明的输入文本,用作查询或指令,引导语言模型产生所需输…

借助Historian Connector + TDengine,打造工业创新底座

在工业自动化的领域中,数据的采集、存储和分析是实现高效决策和操作的基石。AVEVA Historian (原 Wonderware Historian) 作为领先的工业实时数据库,专注于收集和存储高保真度的历史工艺数据。与此同时,TDengine 作为一款专为时序数据打造的高…

关于会议论文/CPCI/ISTP会议论文

关于会议论文 会议论文是公开发表的学术论文,一般正式的国际学术会议都会公开征稿,并要求录用的论文在会议上进行宣读、交流,然后集结出版,这就是我们常说的会议论文集,而这些发表的论文也可用于硕博毕业、项目结题、…

视频直播点播EasyDSS平台授权时,出现授权时间即将到期的提示是什么原因?

视频直播点播EasyDSS平台具备灵活的视频能力,包括直播、点播、转码、管理、录像、检索、时移回看等,平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等能力服务,可应用在无人机推流、在线直播、虚拟直播、远程培训等场景中。…

跃入AI新纪元:亚马逊云科技LLM全景培训,解锁AI构建者之路

亲爱的技术爱好者们,你是否也对大语言模型(LLM)的神奇魅力所吸引,渴望深入探索其背后的技术奥秘?今天,我要为大家推荐一份超级硬核的学习资源——亚马逊云科技 对话AI 构建者:从基础到应用的LLM…

Linux安装Docker | 使用国内镜像

环境 CentOS7 先确认能够上网 curl www.baidu.com返回该输出说明网络OK 步骤一:安装gcc 和 gcc-c yum -y install gccyum -y install gcc-c步骤二:安装Docker仓库 yum install -y yum-utils接下来配置yum的国内镜像 yum-config-manager --add-re…

基于变分自动编码器VAE的电池剩余使用寿命RUL估计

加载模块 import math import itertools import numpy as np import pandas as pd import seaborn as sns import tensorflow as tf from keras import layers from sklearn.svm import SVR from tensorflow import keras from keras import backend as K import matplotlib.p…

Unity | Shader基础知识(番外:了解内置Shader-Standard-含specular模式<二>)

目录 前言 一、Standard参数详解 1.NormalMap法线贴图 2.HeightMap高度贴图 3.Occlusion遮挡贴图 4.DetailMask细节遮挡 5.Emission自发光 6.Tiling铺地砖和Offset偏移度 二、Standard-Specular setup模式 三、作者的碎碎念 前言 Unity | Shader基础知识(番外&#xf…