Japin

登高必自卑,行远必自迩

在 PostgreSQL 中,查询一般会经历以下几个阶段:

  1. 应用程序连接到 PostgreSQL 并发送查询请求,随后等待返回结果。
  2. 解析器(parser)检查应用程序传输的查询的语法是否正确并创建查询树(query tree)。
  3. 重写系统(rewrite system)采用解析器阶段创建的查询树,并查找存储在系统表中的规则来重写查询树,例如视图。
  4. 规划器/优化器(planner/optimizer)采用(重写的)查询树并创建一个查询计划,该计划将作为执行器(executor)的输入。
    它首先创建得到相同结果的所有路径。例如,在表上有索引,那么将会创建两个查询路径:顺序扫描和索引扫描。接下来估计每条路径的执行成本并选择最便宜的路径,将最便宜的路径扩展为执行器可以使用的完整计划。
  5. 执行器递归地遍历计划树并以计划表示的方式检索行。执行器在扫描表时会使用存储系统、执行排序和连接、估算条件并最后归还得到的行。
阅读全文 »

pg_cron 是 PostgreSQL 数据库的一个作业调度器插件,通过该插件我们可以定时的执行一些特殊的任务。它遵循 Linux crontab 的配置语法,您可以通过在线工具 crontab.guru 来验证您的 cron 表达式。目前,pg_cron 仅支持 PostgreSQL 10 及其之后的版本。本文将简要介绍 pg_cron 的安装及其使用。

阅读全文 »

上一篇中我介绍了如何在 PostgreSQL 数据库中使用存储过程来发送 HTTP 请求,本文则介绍如何使用 PostgreSQL 的存储过程发送邮件。

Oracle 数据库提供了 ult_smtp 来发送邮件,PostgreSQL 同样的不支持该功能,因此只能采取曲线救国的策略,本文将采用 plpython3u 来编写存储过程并发送邮件。

阅读全文 »

在 Oracle 迁移到 PostgreSQL 数据库的过程中,我们通常使用 PostgreSQL 中的 VARCHAR 类型替换 Oracle 中的 VARCHAR2 类型。本文将针对 Oracle 中的 VARCHAR2 类型和 PostgreSQL 中的 VARCHAR 类型进行简要的比较。

阅读全文 »

在最近发布的 PostgreSQL 14 中,我们最兴奋的功能之一是引入了 multirange 类型。简而言之,multirange 类型是一组不重叠的范围(range)。与范围数组不同,它们防止重叠,因此允许你有效地建立有间隙的范围模型。

我们对它们的一个用例是建立时间模型。例如,如果您想记录累积的时间和某人在医院的天数,您可以将其存储为一个 datemultirange 类型。

在 PostgreSQL 14 中,有相当多的运算符和函数可用,但我们需要的一些明显的运算符和函数包括聚合,如联合聚合,目前还不存在。然而,还有一些标准的运算符,如 +(合并两个范围)和 * 表示两个范围相交,- 表示两个范围的差,以及常见的包含布尔运算符。

阅读全文 »

Oracle 数据库中空字符串和 NULL 在字符串的环境下是相同的,这就意味着我们可以直接将其与字符串进行操作从而得到我们想要的结果,然而在 PostgreSQL 数据库中,任何字符串与 NULL 进行操作结果均为 NULL。因此,在迁移 NULL 字符串操作时,我们需要特别注意。

阅读全文 »
0%