2 数据库管理


本章涵盖了管理 Postgresql服务器需要了解的一些基本操作,包括角色与权限管理
database的创建、安装扩展包、数据备份与恢复等。在开始之前,请先安装好 Postgresql
及其相应的管理工具,并且要保证自己有权任意地调整和使用该套环境。

2.1配置文件

  • 配置文件包含以下三个

  • postgresql. conf

  • 通用设置,

    • 内存分配、
    • 新建database的默认存储位置、
    • 服务器的IP、
    • 日志位置以及许多其他
  • pg__hba.conf

    • 控制服务器的访问权限,
    • 允许哪些用户连接到哪个数据库,
    • 允许哪些IP连接到本服务器,
    • 指定连接时使用的身份验证模式。
  • pg_ident.conf

    • 如果存在,
    • 则系统会基于文件内容将当前登录的操作系统用户映射为一个Postgresql数据库内部用户的身份来登录
    • 有些人会把操作系统的root用户映为Pg的postgres超级用户账号

2 数据库管理

  • 如果安装过程中用默认配置,则上述文件位于主数据文件夹。
  • 任何文本编辑器来编辑这些文件,或者在 pgadmin的 Admin Pack页面上修改,详情请参见4.2.3节。
  • 如果你不确定这些文件的具体位置,以超级用户身份连接到任何
    个数据库上并执行示例2-1中的査询语句即可找到。

2 数据库管理

2.1.1让配置文件生效

2.6扩展包机制

2 数据库管理

  • extension是用于扩展功能的插件机制,前身称“contrib”
  • 该机制体现开源界优势:
    • 人们互相协作、共同开发并*分享新的功能

2 数据库管理

  • 一台Pg服务器,不是每个database都要安装全部扩展包,只当某个 database的确需要此扩展包提供的功能时オ安装
  • 服务器上的所有database都要某些扩展包,
    • 可新建一个模板数据库(模板数据库见2.4.1节),
    • 然后在此模板数据库中预先安装好这些扩展包,
    • 后续的database就能以此模板数据库为基础来创建

  • 定期检査并卸载不再需要的扩展包
  • 将不再需要的老扩展包保留在系统中可能会在Pg升级过程中引发问题,
  • 升级后的 Postgresql中需把这些扩展包所含有的对象原地重建一遍

  • 某个database中安装哪些扩展包,可连接到该database,
  • 然后执行

2 数据库管理

  • Postgresql服务实例中所有database安装的所有扩展包,
  • WHERE installed version IS NOT NULL删掉。

  • 某个database中已安装的扩展包的更多详细内容

2 数据库管理

2 数据库管理

  • 显示该扩展包中包含哪些内容:

2 数据库管理

  • 护展包中含各类数据库对象,
    • 函数、表、数据类型、数据类型转换器、编程语言、
    • 运算符
    • 函数常占大部分。

2 数据库管理

  • 我天,对象描述下面就告诉你这个扩展里面有啥东西啊!!
  • 这个东西不就是sql文件夹里的吗

2.6.1扩展包的安装

  • 两步:
  • 下载安装包并安装到数据库服务器上;
  • 将此扩展包安装到目标 database

2 数据库管理

  • 也介绍在不支持extension扩展包机制的老版本上安装contrib扩展包

步骤一:将扩展包安装到数据库服务器

  • 根据操作系統的不同而有所不同。
  • 先下载该扩展包的安装文件以及所依赖的库文件
    • 然后分别复制到操作系统的bin和lib,
    • 同时把SQL脚本文件复制到share/ extension
    • (9.1版及之后)或share/contrib(9.1之前)

  • 对较小的扩展包,其所需的很多库文件在Postgresql安装好以后就有了,没有的话可通过yum或 apt get postgresql- contrib获取
  • 以上方式获取不到的库文件,要么自行编译,
    • 要么找一下别人已经编译好的安装包,
    • 要么从另一台环境完全相同的服务器上把库文件复制
  • 对POSTGIS这类较大的扩展包,
    • 可从你下载 Postgresql的站点下载到完整的安装包。
  • 当前服务器上有哪些扩展包可用,执行

2 数据库管理

步骤二:将扩展包安装到指定的 database中

  • CREATE EXTENSI0N将扩展包安装到指定的database
  • 相比原来的安装方法,该新机制三大优点:
    • 用户不需弄清扩展包文件存放的具体路径(share/extension);
    • DROP EXTENSION方便卸载扩展包
    • 支持査看当前已安装和可安装的扩展包列表。
  • Postgresql安装包中已经附带了最常用的若干扩展包。
    • Postgresql Extension Network站点可以下载到 Postgresql安装包中默认未附带的扩展包
  • Github站点上也有很多Postgresql扩展包,
    • postgresql extension”就能找到

  • 仍可用psql以非交互方式安装扩展包
  • 先连接到需要安装此扩展包的database,
  • 执行

2 数据库管理

2 数据库管理

  • 强烈建议创建专门的schema来安装扩展包,以确保扩展包数据与业务数据隔离。
  • 建好schema后,
  • 以下命令将其指定给待安装的扩展包

2 数据库管理

  • 升级版本以支持新的 extension扩展包机制
  • 如果你从9.1或更早版本升级到了9.1版或者之后的版本,并且也正确地将数据从老版本导入到了新版本之中,那么之前安装的那些 contrib扩展包依然是可以正常工作的。
  • 但为了简化管理并提升可维护性,你应该将存放于 contrib文件夹中的那些老扩展包升级为新格式的 extension扩展包。
  • 这种格式升级是完全可以实现的,尤其是对那些随Postgresql版本附帯的扩展包来说更加没问题。
  • 这里说的“升级”是指从contrib格式到 extension格式的“格式升级”,而不是指扩展包本身的“功能升级”。

  • 如果你之前在一套9.0版的 contrib schema中安装了 tableful扩展包(这是一个用于实现跨表査询的功能插件),然后你将该系统升级到了9.1版,那么可以执行以下命令来升级此插件

2 数据库管理

  • 该命令搜索contrib schema(假设你已把所有的扩展包都安装在这里面),找到所有属于tableful插件的成员对象,然后把它们按照新的 extension扩展包模型格式进行封装,这样该扩展包就会出现在pg_ available_ extensions视图信息中,就好像是全新安装的一个
    extension扩展包一样。这样就实现了从 contrib到 extension的扩展包格式升级。
    该命令会将 contrib schema中的插件函数按 extension模式进行封装格式升级,函数本身不
    会有任何改动,但此后该 database进行备份时不会包含这些函数,因为它们的身份已经发
    生了变化,从与别的函数身份无法区分的普通函数变为 extension扩展包中的函数。