PostgreSQL 使用存储过程发送邮件
在上一篇中我介绍了如何在 PostgreSQL 数据库中使用存储过程来发送 HTTP 请求,本文则介绍如何使用 PostgreSQL 的存储过程发送邮件。
Oracle 数据库提供了 ult_smtp 来发送邮件,PostgreSQL 同样的不支持该功能,因此只能采取曲线救国的策略,本文将采用 plpython3u 来编写存储过程并发送邮件。
在 Oracle 中可以通过 utl_http 来发送 HTTP 请求,PostgreSQL 中默认不支持,但是,我们可以通过 plpython3u 插件来实现这个功能。
在 Oracle 迁移到 PostgreSQL 数据库的过程中,我们通常使用 PostgreSQL 中的 VARCHAR
类型替换 Oracle 中的 VARCHAR2
类型。本文将针对 Oracle 中的 VARCHAR2
类型和 PostgreSQL 中的 VARCHAR
类型进行简要的比较。
最近发现 PostgreSQL 在更新组合类型构成的 domain 数组将导致数据库崩溃。在写这篇文章的时候这个 bug 已经被修复了。
最近在浏览 PostgreSQL 邮件列表时发现一个 bug:逻辑复制时,如果发布者和订阅者的 datestyle
不一致可能导致逻辑复制失败。本文简要记录这个问题的分析与修复方法。
在最近发布的 PostgreSQL 14 中,我们最兴奋的功能之一是引入了 multirange 类型。简而言之,multirange 类型是一组不重叠的范围(range)。与范围数组不同,它们防止重叠,因此允许你有效地建立有间隙的范围模型。
我们对它们的一个用例是建立时间模型。例如,如果您想记录累积的时间和某人在医院的天数,您可以将其存储为一个 datemultirange 类型。
在 PostgreSQL 14 中,有相当多的运算符和函数可用,但我们需要的一些明显的运算符和函数包括聚合,如联合聚合,目前还不存在。然而,还有一些标准的运算符,如 +
(合并两个范围)和 *
表示两个范围相交,-
表示两个范围的差,以及常见的包含布尔运算符。
Oracle 数据库中空字符串和 NULL
在字符串的环境下是相同的,这就意味着我们可以直接将其与字符串进行操作从而得到我们想要的结果,然而在 PostgreSQL 数据库中,任何字符串与 NULL
进行操作结果均为 NULL
。因此,在迁移 NULL
字符串操作时,我们需要特别注意。
Oracle 迁移到 PostgreSQL 中最常见的问题就是 DUAL
表的问题。在 Oracle 数据库中,每个查询都必须跟随一个 FROM
子句,这是强制性的。然而在 PostgreSQL 数据库中,FROM
子句是可选的。本文记录了如何将 Oracle 中的 DUAL
表迁移到 PostgreSQL 数据库中。
数据库通常都提供了一系列预定义的聚合函数(Aggregate Functions),例如 MAX,MIN,SUM 等,它们对一组数据进行操作。这些预定义的聚合函数通常只能处理标量类型,不能处理诸如对象类型等复杂的数据类型,当前大部分数据库都提供了为复杂数据类型自定义聚合函数(User-Defined Aggregate Functions)的功能。本文简要介绍 Oracle 中的自定义聚合函数以及如何迁移到 PostgreSQL 数据库中。