Japin

登高必自卑,行远必自迩

MERGE INTO 语法很早之前就在 Oracle 数据库中实现了,最近 PostgreSQL 也实现了相应的语法,该语法符合 SQL2016 标准,与 Oracle 的 MERGE INTO 还是有一定区别的。本文简要介绍一下 PostgreSQL 中的 MERGE INTO 语法。

阅读全文 »

尽管不幸的事仍在发生[1],但我们还是需要继续这个系列。在上一篇文章中,我们回顾了查询执行的各个阶段。在我们继续计划节点操作(数据访问和连接方法)之前,我们需要了解成本优化器的基本要素:统计信息。

和往常一样,我所有的例子都使用演示数据库。您可以下载并跟着一起执行。

今天您会在这里看到很多执行计划。我们将在以后的文章中更详细地讨论这些计划是如何运作的。现在只需注意您在每个计划的第一行中看到的数字,在单词 rows 旁边。这些是行数估计值或基数。

阅读全文 »

您好!我正在开始另一个关于 PostgreSQL 内部的文章系列。这一篇将侧重于查询计划和执行机制。本系列将涵盖:

  1. 查询执行阶段(本文)
  2. 统计信息
  3. 顺序扫描
  4. 索引扫描
  5. 嵌套循环连接
  6. Hash 连接
  7. 归并连接

本文借鉴了我们的 QPT 查询优化课程(即将推出英文版),但主要关注查询执行的内部机制,而将优化方面放在一边。另请注意,本系列文章是针对 PostgreSQL 14 编写的。

阅读全文 »

最近在邮件列表中看到一个关于聚集列的数据类型修改导致的异常问题 BUG #17409。本文简要记录一下分析过程以及解决方案。目前该问题已经被修复,在 14.1 和 14.2 版本中应该可以重现。

commit 641f3dffcdf1c7378cfb94c98b6642793181d6db
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date:   Fri Mar 11 13:47:26 2022 -0500

    Restore the previous semantics of get_constraint_index().

    Commit 8b069ef5d changed this function to look at pg_constraint.conindid
    rather than searching pg_depend.  That was a good performance improvement,
    but it failed to preserve the exact semantics.  The old code would only
    return an index that was "owned by" (internally dependent on) the
    specified constraint, whereas the new code will also return indexes that
    are just referenced by foreign key constraints.  This confuses ALTER
    TABLE, which was implicitly expecting the previous semantics, into
    failing with errors like
        ERROR:  relation 146621 has multiple clustered indexes
    or
        ERROR:  "pk_attbl" is not an index for table "atref"

    We can fix this without reverting the performance improvement by adding
    a contype check in get_constraint_index().  Another way could be to
    make ALTER TABLE check it, but I'm worried that extension code could
    also have subtle dependencies on the old semantics.

    Tom Lane and Japin Li, per bug #17409 from Holly Roberts.
    Back-patch to v14 where the error crept in.

    Discussion: https://postgr.es/m/17409-52871dda8b5741cb@postgresql.org
阅读全文 »

最近在分析 bug 的时候接触到了 git bisect 这个命令,虽然之前也知道这个命令,但是由于平时用的不多所以没有深入的研究,对它的使用方法也不是很熟悉。其实这个命令使用起来还是非常简单的,本文结合实际情况简要介绍一下 git bisect 的使用方法。

阅读全文 »
0%