【译】PostgreSQL 中的 JOIN 策略及其性能

在 PostgreSQL 数据库中有三种 JOIN(连接)策略,它们的工作方式截然不同。如果 PostgreSQL 选择了错误的策略,查询性能会受到很大的影响。这篇文章解释了这些连接策略,如何通过索引来支持它们,它们存在什么问题,以及如何调整连接从而获得更好的性能。
在 PostgreSQL 数据库中有三种 JOIN(连接)策略,它们的工作方式截然不同。如果 PostgreSQL 选择了错误的策略,查询性能会受到很大的影响。这篇文章解释了这些连接策略,如何通过索引来支持它们,它们存在什么问题,以及如何调整连接从而获得更好的性能。
LATERAL
连接是 PostgreSQL 和其他关系型数据库(如 Oracle、DB2 和 MS SQL)中鲜为人知的功能之一。然而,LATERAL
连接是一个非常有用的功能,本文将带你看看用它们能完成什么有意义的事情。
在 SQL 和 PostgreSQL 社区中,大多数人都使用过许多数据库引擎提供的 LIMIT
子句。然而,很多人不知道的是,LIMIT/OFFSET
是不符合标准的,因此不能移植。处理 LIMIT 的正确方法基本上是使用 SELECT ... FETCH FIRST ROWS
。然而,还有更多的东西没有被发现。
我在 Emacs 中使用 gtags (GNU global source code tag system) 来作为代码导航的基本工具,它默认标记根目录及其子目录,但是有一些子目录其实我并不想要被标记。本文简要记录一下如何告知 gtags 忽略某些目录或文件。
本文结合官方文档整理记录了一下关于 MongoDB 中分片的概念以及如何搭建一个分片集群。
本文简要记录一下如何将 Oracle 数据库中的 sys_connect_by_path()
函数迁移到 PostgreSQL 数据库中。
函数 sys_connect_by_path()
通常是与 Oracle 中的 connect by
子句一起使用的,而 connect by
子句转换到 PostgreSQL 中时通常是使用 WITH RECUSIVE
来实现。
最近在做 Oracle 迁移的时候发现一个类型错误,如下所示:
1 | ERROR: invalid input syntax for type numeric: "null" |
这个问题其实很简单,就是原始数据里面包含 'null'
的字符串导致的。解决这个问题的办法就是将数据中为 'null'
的异常数据转换为正常数据。
最近由于需要从事 Go 语言相关的工作,为此花了约一个星期的时间将《Go 语言实战》这本书过了一遍,对 Go 语言有了一个基本的认识。这本书短小精悍,全书 200 多页,详细介绍了 Go 语言的数组、切片的底层原理,Go 语言的类型系统、并发、通道以及测试。当然部分内容也没有深入的讲解,如映射,其底层的实现介绍的不是很充分。《Go 语言实战》这本书适合有一定语言编程经验的读者。
在目前的 PostgreSQL 13 中,如果我们采用同步逻辑复制,那么在同步 TRUNCATE 表时,可能会发生数据库 hang 住的可能。本文便是针对这一问题进行分析。