问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

《PostgreSQL 开发指南》第 05 篇 数据库与模式

发布网友 发布时间:2024-10-01 17:24

我来回答

1个回答

热心网友 时间:2024-11-03 08:26

为方便大家学习,已制作电子版PDF专栏,免费提供下载:github.com/dongxuyang19...

在前一篇中,我们学习了 PostgreSQL 中角色和用户的基本概念。PostgreSQL 利用角色来实施数据库用户与组的功能。创建可供登录的角色(即用户)后,即可使用这些用户连接至数据库并执行相应操作。

本篇我们将探讨如何操作数据库及其中的模式。

基本概念

我们先介绍一些基本概念。

图片来自 Sumeet Shukla

创建数据库

接下来,我们将学习如何管理数据库与模式。首先查看默认安装后的数据库,使用操作系统的 postgres 用户登录,并通过 psql 工具连接:

使用 psql 工具的 \l 命令可查看当前集群中的数据库:

同时,您也可以使用 SQL 语句查看现有的数据库:

系统默认创建了 3 个数据库,其中 template0 和 template1 是模板数据库,新建数据库时默认基于 template1 进行复制;postgres 数据库是为 postgres 用户创建的默认数据库。

使用 SQL 语句 CREATE DATABASE 创建一个数据库:

其中的 name 指定了数据库的名称。例如,以下语句创建了一个名为 testdb 的数据库:

创建数据库时还可以指定许多选项,如字符集编码、所有者、默认表空间、最大连接数等。详情请参考官方文档中的完整 CREATE DATABASE 语句。

修改数据库

创建后,您可以通过 ALTER DATABASE 语句修改数据库的属性和配置:

其中,action 指定了要执行的修改操作,例如修改数据库的名称、所有者、默认表空间、数据库会话变量的默认值等。

以下语句修改 testdb 的名称:

然后将数据库 newdb 的所有者修改为 tony:

除了修改常见的属性外,ALTER DATABASE 语句还可用于修改运行时配置变量的会话默认值。

当用户连接数据库时,PostgreSQL 会使用配置文件 postgresql.conf 或启动命令 postgres 中设置的变量值作为默认值。使用 ALTER DATABASE 语句可设置指定数据库的这些配置:

对于随后连接的会话,PostgreSQL 会使用该命令设置的值覆盖 postgresql.conf 文件或命令行参数的值。注意,只有超级用户或数据库的所有者才能修改数据库的默认会话变量。

例如,以下语句将默认禁用数据库 newdb 中的索引扫描:

使用以下命令可以还原默认配置:

详细的修改选项请参考官方文档中的 ALTER DATABASE 语句。

删除数据库

如果不需要,可以使用 DROP DATABASE 语句删除一个数据库:

如果使用了 IF EXISTS,删除一个不存在的数据库时不会产生错误信息。

删除数据库会同时删除该数据库中所有的对象,以及文件系统中的数据目录。只有数据库的所有者才能删除数据库。另外,如果数据库上存在用户连接,无法执行删除操作,可以连接到其他数据库执行删除命令。

以下语句可以用于删除 newdb 数据库:

DROP DATABASE 命令的删除操作无法恢复,使用时请务必谨慎!

管理模式

创建了数据库后,还需要创建模式(Schema)才能存储数据库对象。通常在创建一个新的数据库时,默认会创建一个模式 public。

首先,我们创建一个新的数据库 testdb:

其中,\c 用于连接到一个数据库;\dn 用于查看当前数据库中的模式。也可以使用 SQL 语句查询模式:

查询结果还显示了系统提供的其他模式。

与数据库的管理类似,PostgreSQL 也提供了管理模式的语句:

以下是一个简单的例子,首先在 testdb 中创建一个新的模式:

创建模式时还可以指定它的拥有者:

以 pg_ 开头的名称是系统保留的模式名称,用户无法创建这样的模式。

创建了模式后,我们就可以在模式中创建各种数据库对象,例如表、数据类型、函数以及运算符等。这些内容将在后面的篇章中进行介绍。

如果需要修改已有模式的属性,可以使用 ALTER SCHEMA 语句:

以上语句分别用于修改模式的名称和拥有者。以下语句将模式 hr 的拥有者改为 tony:

如果模式中没有任何对象,使用以下语句即可删除该模式:

以下示例将删除模式 hr:

如果模式中存在其他对象,以上语句无法执行;需要先删除该模式中所有的对象,或者使用以下语句级联删除这些对象:

级联删除可能会删除一些我们意料之外的对象,使用时需要小心。

数据库中的大多数对象都位于某个模式中,这样设计的好处在于:

在我们使用的所有数据库对象中,最主要的就是数据表(table)。下篇我们将介绍数据库表的相关管理操作,敬请期待。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? postgresql:字符串字段转换为数值类型 淘宝宝贝上架和下架如何自己设置时间呢? 紫薯属于哪一类食物?有什么做法? 我的心意是什么意思? 《橘子汽水 南拳妈妈i am so crazy的歌词 ps套索隐藏工具里找不到多边形套索ps套索工具和多边形套索怎么来回... 事实证明,养了一只狸花猫,才知道香在哪里! 如何用Photoshop等工具制作LowPoly低多边形风格的背景 怎样能把自己制作的相册视频发表在qq日志上 怎么把网上的视频放到QQ空间上谢谢了,大神帮忙啊 怎么把自己用手机录的视频放到空间主页上呢大神们帮帮忙 怎么把自己的视频弄到QQ空间里?大神们帮帮忙 海南三亚什么高中比较不错? 台儿庄自然人文 台儿庄镇的自然状况 我这里是小区,但是我拉的是10M的网线给5个人用怎么都不够?是电信限制我... 电信100M光纤,用维盟企业路由器和2个24口tp交换机,超过30台电脑上网就... Kafka和RabbitMQ有哪些区别,各自适合什么场景? 建行网银怎么改密码 电脑知苗易约怎么刷新 红米手机会自己发出声音且无法关闭,必须重启才能恢复。为什么会... ...三星手机喇叭里怎么会发出兹拉的电流声,手机锁屏或者充电时都会有声... 淘宝下架时间能设置多久?下架多久没权重? 解救数据库混乱!PostgreSQL虚拟生成列(Generated Columns)教你轻松规... 安装postgresql碰到Unable to write inside TEMP environment path,怎... 带圈数字符号1到100可复制谢谢? 请问有没有和苏菲的异界类似的小说?比较现代的那种文章,不好看的不要... 有类似苏菲的异界的小说吗?西方的最好 三(1)班的同学计划为学校植树24棵,每天值3颗,4月5日值完,请问他们是几... ...像是《苏菲的异界》那样的小说!一定要是完结的哦谢谢了 新版iPad mini今年会发布吗? 哪些苹果产品可能在2019年3月的春季新品发布会上亮相? 现在入手ipad4划算吗?如果ipad5发布后ipad4会降价多少 多少年我们一起走过多少人是过客 我的英雄学院英雄之心腾讯手游安卓游戏如何下载 我的英雄学院:英雄之心是新游戏吗?以前我记得有很多我的英雄学院游戏啊... 现在最大的手机屏幕是多大,是小米几。 擦牙散《疡医大全》卷十六。 为自己开方:名老中医的特效养生妙招目录