title: PostgreSQL category: page slug: postgresql sortorder: 0505 toc: False sidebartitle: PostgreSQL meta: PostgreSQL 是一款开源的关系型数据库,它常用于 Python 应用中。 authors: haiiiiiyun.github.io writing-time: 2016-07-19 19:11—2016-07-24 09:08

PostgreSQL

PostgreSQL, 通常写作 “Postgres”,发音为 “Poss-gres”, 是一款开源的 关系型数据库 实现,它常在 Python 应用中作为数据存取的后端使用。

PostgreSQL logo.

PostgreSQL 如何应用于 Python 开发?

PostgreSQL 是很多 Python 开发人员的默认数据库选项,包括 Django 团队在测试 Django ORM 时也选得它。 相比于 MySQL、SQLServer 和 Oracle,人们通常认为 PostgreSQL 具有更多功能且更加稳定。选择以上任何一款数据库都没有错。但是,由于 PostgreSQL 倾向于被较多的 Python 开发人员选用,因而针对该数据库的驱动器和示例代码也会有更好的文档,在典型使用场景中存在 BUG 的几率也会更小。如果你想在 Django 中使用 Oracle,你会发现有关 Oracle 的配置示例代码相比 PostgreSQL 后端的少得多。

PostgreSQL 是对 关系型数据库 概念的一种实现。在 数据 那一章学习更多相关知识,或者到 总目录页 了解所有主题。

为什么说 PostgreSQL 是一个不错的数据库选择?

PostgreSQL 的开源许可允许开发人员无需考虑许可费用问题就可操作一个或多个数据库。开源许可运营模式相较于 Oracle 或其它专有数据库,其花费更少,特别是在规模增加到需要复制和分片的时候。另外,由于从独立开发人员和跨国组织等的大量人员使用 PostgreSQL,因而相比于其它的关系型数据库,找到具有 PostgreSQL 经验的开发人员通常容易的多。

PostgreSQL 核心团队还经常发布更新,从而显著提高了数据库的能力。例如, PostgreSQL 9.4 版本 就增加了 jsonb 类型,用来增强对 JavaScript 对象表示 (JSON) 的存储能力,从而减少了在一个应用体系中另外再使用一个独立 NoSQL 数据库 的需求。

在 Python 中连接 PostgreSQL

在 Python 中使用关系型数据库,需要一个数据库驱动器,通常也叫作数据库连接器。连接 PostgreSQL 的最常用驱动库是 psycopg2。在 PostgreSQL 官网的 wiki 页上有一份有关所有驱动器的列表,其中包括了一些已经不再维护了的库。如果你使用 asyncio 这个 Python 标准库 的话,你还应该了解下 aiopg,它还封装了 psycopg2 的异步操作功能。

要想在数据表和对象间抽象出对应关系,许多 Python 开发人员会利用 对象-关系映射器 (ORM) 来将 PostgreSQL 中的关系型数据转化成可以在 Python 代码中使用的对象。例如,PostgreSQL 提供关系型数据库功能,而 psycopg 是常用的数据库连接器,但很多 ORM 能用于各种不同的 Web 框架,如下图所示。

各种不同的 Python ORM 如何与 PostgreSQL 和 psycopg2 连接器一起使用的例子。

关于 Python ORM 主题的特定页 了解更多知识。

PostgreSQL 数据安全性

如果你使用 Linux,那么使用包管理器就能很容易地安装 PostgreSQL。但是,一旦数据库安装运行后,你的责任才刚刚开始。在将其用于生产环境前,确保:

  1. 通过 pg_hba.conf 文件将访问者限制到 一份白名单里
  2. 开启 复制 到另一个数据库的功能,另一个数据库最好位于另一个地方的不同基础设施之上。
  3. 定期执行 备份并且测试还原过程
  4. 确保你的应用已经对 SQL 注入攻击 进行了预防

尽可以邀请有资质的人员进行一次 PostgreSQL 安全审计,以便找出数据库中的最大安全隐患。小型应用和初创公司刚开始通常负担不了一个全职审计员,但是随着应用程序的发展,它将越有可能成为攻击目标。

存储在数据库中的数据是应用的生命力所在。如果你曾经 不小心删除过一个生产环境中的数据库 或者是 SQL 注入攻击等恶意行为的受害者,你就会明白:只需事先进行诸如备份、复制和安全举措等额外一点儿工作,都能使数据恢复变得更加容易。

针对 Python 的 PostgreSQL 相关资源

有很多针对 Django、Flask 及其它 Web 框架的入门教程资料。以下列出的几篇是我读过的最好的。

通用 PostgreSQL 相关资源

不是专门针对 Python 的 PostgreSQL 教程对于正确处理数据也是相当有帮助的。

PostgreSQL 监测与性能

监测一个或多个 PostgreSQL 实例,然后对它们进行优化是一项罕见技能。如果你想在应用中处理这些问题,下面的一些资源能帮助你入门。

  • 这篇 PostgreSQL 监测指南 对于了解需要监测什么及如何监测十分便捷有用。

  • Craig Kerstiens 写了一篇有关 理解 PostgreSQL 性能 的详细文章。

  • PostgreSQL 优化实践指南 讲述了通过使用缓存大小、恢复配置和共享缓存来提高数据库性能。

  • 这篇关于 PostgreSQL 性能调优 的文章,其内容覆盖了如何查找慢速查询、调整索引及修改查询使其运行更快。

  • 从 PostgreSQL 中获取性能信息 讲解了如何收集常用的性能度量值,并提供了获取这些信息需要运行的查询语句。该文还讲述了性能监测及如何分析触发函数。

  • PostgreSQL 监测查询 是一个有关 SQL 查询的简单的 GitHub 项目,它可运行于一个 PostgreSQL 实例来对其用量、缓存和膨胀进行侦测。