2 数据库管理
本章涵盖了管理 Postgresql服务器需要了解的一些基本操作,包括角色与权限管理
database的创建、安装扩展包、数据备份与恢复等。在开始之前,请先安装好 Postgresql
及其相应的管理工具,并且要保证自己有权任意地调整和使用该套环境。
2.1配置文件
-
配置文件包含以下三个
-
postgresql. conf
-
通用设置,
- 内存分配、
- 新建database的默认存储位置、
- 服务器的IP、
- 日志位置以及许多其他
-
pg__hba.conf
- 控制服务器的访问权限,
- 允许哪些用户连接到哪个数据库,
- 允许哪些IP连接到本服务器,
- 指定连接时使用的身份验证模式。
-
pg_ident.conf
- 如果存在,
- 则系统会基于文件内容将当前登录的操作系统用户映射为一个Postgresql数据库内部用户的身份来登录
- 有些人会把操作系统的root用户映为Pg的postgres超级用户账号
- 如果安装过程中用默认配置,则上述文件位于主数据文件夹。
- 任何文本编辑器来编辑这些文件,或者在 pgadmin的 Admin Pack页面上修改,详情请参见4.2.3节。
- 如果你不确定这些文件的具体位置,以超级用户身份连接到任何
个数据库上并执行示例2-1中的査询语句即可找到。
2.1.1让配置文件生效
2.6扩展包机制
- extension是用于扩展功能的插件机制,前身称“contrib”
- 该机制体现开源界优势:
- 人们互相协作、共同开发并*分享新的功能
- 一台Pg服务器,不是每个database都要安装全部扩展包,只当某个 database的确需要此扩展包提供的功能时オ安装
- 服务器上的所有database都要某些扩展包,
- 可新建一个模板数据库(模板数据库见2.4.1节),
- 然后在此模板数据库中预先安装好这些扩展包,
- 后续的database就能以此模板数据库为基础来创建
- 定期检査并卸载不再需要的扩展包
- 将不再需要的老扩展包保留在系统中可能会在Pg升级过程中引发问题,
- 升级后的 Postgresql中需把这些扩展包所含有的对象原地重建一遍
- 某个database中安装哪些扩展包,可连接到该database,
- 然后执行
- Postgresql服务实例中所有database安装的所有扩展包,
- WHERE installed version IS NOT NULL删掉。
- 某个database中已安装的扩展包的更多详细内容
- 或
- 显示该扩展包中包含哪些内容:
- 护展包中含各类数据库对象,
- 函数、表、数据类型、数据类型转换器、编程语言、
- 运算符
- 函数常占大部分。
- 我天,对象描述下面就告诉你这个扩展里面有啥东西啊!!
- 这个东西不就是sql文件夹里的吗
2.6.1扩展包的安装
- 两步:
- 下载安装包并安装到数据库服务器上;
- 将此扩展包安装到目标 database
- 也介绍在不支持extension扩展包机制的老版本上安装contrib扩展包
步骤一:将扩展包安装到数据库服务器
- 根据操作系統的不同而有所不同。
- 先下载该扩展包的安装文件以及所依赖的库文件
- 然后分别复制到操作系统的bin和lib,
- 同时把SQL脚本文件复制到share/ extension
- (9.1版及之后)或share/contrib(9.1之前)
- 对较小的扩展包,其所需的很多库文件在Postgresql安装好以后就有了,没有的话可通过yum或 apt get postgresql- contrib获取
- 以上方式获取不到的库文件,要么自行编译,
- 要么找一下别人已经编译好的安装包,
- 要么从另一台环境完全相同的服务器上把库文件复制
- 对POSTGIS这类较大的扩展包,
- 可从你下载 Postgresql的站点下载到完整的安装包。
- 当前服务器上有哪些扩展包可用,执行
步骤二:将扩展包安装到指定的 database中
- CREATE EXTENSI0N将扩展包安装到指定的database
- 相比原来的安装方法,该新机制三大优点:
- 用户不需弄清扩展包文件存放的具体路径(share/extension);
- DROP EXTENSION方便卸载扩展包
- 支持査看当前已安装和可安装的扩展包列表。
- Postgresql安装包中已经附带了最常用的若干扩展包。
- Postgresql Extension Network站点可以下载到 Postgresql安装包中默认未附带的扩展包
- Github站点上也有很多Postgresql扩展包,
- postgresql extension”就能找到
- 仍可用psql以非交互方式安装扩展包
- 先连接到需要安装此扩展包的database,
- 执行
- 强烈建议创建专门的schema来安装扩展包,以确保扩展包数据与业务数据隔离。
- 建好schema后,
- 以下命令将其指定给待安装的扩展包
-
- 升级版本以支持新的 extension扩展包机制
- 如果你从9.1或更早版本升级到了9.1版或者之后的版本,并且也正确地将数据从老版本导入到了新版本之中,那么之前安装的那些 contrib扩展包依然是可以正常工作的。
- 但为了简化管理并提升可维护性,你应该将存放于 contrib文件夹中的那些老扩展包升级为新格式的 extension扩展包。
- 这种格式升级是完全可以实现的,尤其是对那些随Postgresql版本附帯的扩展包来说更加没问题。
- 这里说的“升级”是指从contrib格式到 extension格式的“格式升级”,而不是指扩展包本身的“功能升级”。
- 如果你之前在一套9.0版的 contrib schema中安装了 tableful扩展包(这是一个用于实现跨表査询的功能插件),然后你将该系统升级到了9.1版,那么可以执行以下命令来升级此插件
- 该命令搜索contrib schema(假设你已把所有的扩展包都安装在这里面),找到所有属于tableful插件的成员对象,然后把它们按照新的 extension扩展包模型格式进行封装,这样该扩展包就会出现在pg_ available_ extensions视图信息中,就好像是全新安装的一个
extension扩展包一样。这样就实现了从 contrib到 extension的扩展包格式升级。
该命令会将 contrib schema中的插件函数按 extension模式进行封装格式升级,函数本身不
会有任何改动,但此后该 database进行备份时不会包含这些函数,因为它们的身份已经发
生了变化,从与别的函数身份无法区分的普通函数变为 extension扩展包中的函数。