Japin

登高必自卑,行远必自迩

Oracle 数据库的 wm_concat 函数用于将多行数据聚合为单行,从而提供与特定值关联的数据列表,它将以逗号来分割列表。
本文主要介绍 wm_concat 函数的功能以及其在 PostgreSQL 数据库中的替换方法。

阅读全文 »

PostgreSQL 使用 autoconf 工具来自动配置软件源代码包。我在修改了 configure.ac 文件之后执行 autoreconf 发现它将引入其他无关的更改,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@@ -1187,6 +1189,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;

+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+

...

@@ -14714,7 +14738,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];

...

这是由于供应商的软件包经常包含一些改进导致的,这就导致了我们生成的 configure 文件与其他提交者的有不同的结果。

阅读全文 »

最近看到 PostgreSQL 邮件列表中有人说 auto_explain 插件在特定情况下会导致 OOM 问题,经过一番分析发现原来是由于内存上下文的问题导致的。目前该泄露已经修复,并合并到代码库中。

阅读全文 »

经过约八个月的努力,终于完成了 PostgreSQL 空闲会话超时断开的功能,该功能将在版本 14 中发布。这是我第一次向 PostgreSQL 提供功能,虽然之前也有向社区提供过补丁,但是这次整个功能(相对比较简单)被接受还是比较高兴的,感谢社区各位大佬的帮助和反馈。

阅读全文 »

PostgreSQL 数据库在 9.0 中引入了物理复制,之前的文章中也有介绍。物理复制将主库中所有的更改都通过 WAL 日志流式地传输到备库中,备库通过重放 WAL 日志来实现同步。但是,物理复制也有其自身的局限性。

  • 不能执行有选择性的复制,或者说不支持复制部分数据库对象;
  • 不能在不同的数据大版本之间进行复制,例如,pg10 -> pg12 是无法通过物理复制来实现同步的;
  • 不能在不同平台之间进行复制,例如,Linux 和 Windows 之间不能使用物理复制来实现同步;
  • 备库无法提供写入操作。

PostgreSQL 在版本 10 中引入了逻辑复制,它用于解决上述物理复制的局限性,同时业务复制开辟了一个新的方向。逻辑复制使用发布和订阅模式,一个或多个订阅者可以订阅一个发布者上的一个或多个发布。订阅者最初会从发布者那里收到复制的数据库对象的副本,并在同一对象上实时进行后续更改。

阅读全文 »

最近在查看 PostgreSQL 数据库中内存分配相关的代码时,我发现 palloc()palloc0() 函数存在大量的冗余代码。本着减少冗余代码的想法,我将修改后的代码提交到社区,得到的反馈是这样修改会影响整体效率。本文简要分析一下这是如何影响效率的。

阅读全文 »

Go 语言的 net/http 包为我们提供了一个 HTTP 客户端和服务器的实现,通过它我们可以快速的搭建一个 HTTP 服务器,本文记录一下在编写 HTTP 服务器时关于设置 HTTP 响应头遇到的一个小问题。

阅读全文 »

最近将博客由 NexT-v5.x 迁移到 NexT-v8.x 版本,这其中有很多东西已将发生变化了。本文简要介绍一下如何在新版中加入近期文章的功能。NexT-v8.x 版本将模版文件由原来的 swig 变更为 njk 后缀,因此,之前的近期文章的功能不再适用,我们需要稍作修改。

阅读全文 »
0%