Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgHLl-00AJIl-2U for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 07:00:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgHLj-00F4Y4-2V for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jan 2026 07:00:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgHLj-00F4Xv-1Q for pgsql-hackers@lists.postgresql.org; Thu, 15 Jan 2026 07:00:55 +0000 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgHLh-000ZSV-2L for pgsql-hackers@postgresql.org; Thu, 15 Jan 2026 07:00:55 +0000 Received: by mail-qt1-x82d.google.com with SMTP id d75a77b69052e-4ee14ba3d9cso7046921cf.1 for ; Wed, 14 Jan 2026 23:00:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768460450; x=1769065250; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=BJ0ZvWxRPmGdOI9YdRdD8vG6nGdzOjh0rsVrJT6Qq3U=; b=iAcCxtMMt0UUpahHIqCxiWGN/LWOJtDghFktdtFZSjsvJtUhVM7vhwp7MsyPcLTg88 T4yHD4YUFqGVS0avmonN4F3LqF4Kz6UjkayM15W0AJbFsI2QuhVYtqMXw/aOAcAiggI1 c4fbyin6DKks+IvVQerwNmbj4/XaDMNAnHxlIc5kjy0AHwGybYid9C+tOfEtjuNwRP36 VZt+Yyy1dfEd3z95Qm35gCr99+OobloH3caNhBAxJM62FuH41eEMUnwc0lhMDMEe6hfB G5q3dJuzWOJ/YZTNif8vmmUlaFmSMgO4tC658m/lhLE4Qu4GnhfpfCQBf7RbTA2iNnDv wD0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768460450; x=1769065250; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BJ0ZvWxRPmGdOI9YdRdD8vG6nGdzOjh0rsVrJT6Qq3U=; b=tzOZWBKNMHmHyyyBAa3im789aiRmjNvBP+YX/l3fHOdqwM7xbhRlzs6qAt40pcmQNx jThwD78SvZHX2awHcPG1Qk8LmqGEx/l5iv8k/+WSnfY3L7WSo5mnn0mZtNaRZhL7llFo uWWe0fs7lcOo1UOZf8YLTD9yGyZsVpUcGITccSMH2Yz9Jfflczs3NlmSEuKoIrxAZwzW ZJ/9YRSPi5KVZopo8TQS759hX5uAftEzoBHPlAVRo/5uvuf+uK2PKSi7IfnA/8iN+6us y5245EYav3yEhjv2wTUjFFzbOpkrxUl8FU7HbkX2ejsTk/cBRp5URhH4NQtsHSxSBDZ1 8JkA== X-Gm-Message-State: AOJu0Yxcq8Hu1zrOt2XANqa3tu4CHsnMJZ6CC4U1ewbnCLwQNK5WLhau brStJa5FrQB/rb+WoWom86255hCB3CdWk0cdhuV5AMO60dNlb3phnMsgsooezB6a4ex2DRWNY6p g/h3VQcFxqEVdWEDYQJ6wfunEZIVl/msZH51MYug= X-Gm-Gg: AY/fxX6tpoQxuZ8s0cAO5AMLD+PpG+Q6Iz11s/kEHIxoFCglnES7fyLpUGX21OggVuj KfK6Iwf+F9svwmCZMOpVrvzlZdDMZfN3qatpoR9Iex51MWDr52PL//lnb0P5Rs72WWFhoT8ba6z kd0pGJ19mRGz0FEUbSxUfHVvPEfkOBqKm/LJ1ZQOMUcvoLGhZLoYuLYo1O7QUM/X3+l/5ls322V Qb8UnjJ1VA9M5ZWrXkRmBqHjO17P1Lh77WMMIIZfsVjlAgDrYkni59V51ZpVqQ/X1kMCSej4TP1 alGXnCk0lciSk77TbL+qIj8bOqB3s/SnNWrQCgByzTVtW1HA+M44SN03 X-Received: by 2002:a05:622a:54c:b0:501:4701:e9f9 with SMTP id d75a77b69052e-5014a90502emr60396991cf.26.1768460450326; Wed, 14 Jan 2026 23:00:50 -0800 (PST) MIME-Version: 1.0 From: Kirill Reshke Date: Thu, 15 Jan 2026 12:00:38 +0500 X-Gm-Features: AZwV_Qg-sWQXUpSqLKZWFstIfPT6ius3sCmt9asnVwsZ_2IPWttR9p3YLdFafWc Message-ID: Subject: Fix gistkillitems & add regression test to microvacuum To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000f1c110064867c830" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f1c110064867c830 Content-Type: text/plain; charset="UTF-8" Hi hackers. While looking at [0] I noticed that XLOG_GIST_DELETE & XLOG_GIST_PAGE_DELETE records are not covered. This thread addresses XLOG_GIST_DELETE, which is also known as a microvacuum feature. test.sql contains regression test that trigger this code to be exercised in stream_regress.pl TAP test. Test is as follows: we create a gist index on the table, then we insert exactly 407 records, making the root page full (next insert will trigger page split). Then I delete all tuples from relation and trigger Index Only scan to do kill-on-select (killtuples). It marks gist 0 page (which is root and is leaf) as has_garbage. Then, the next insertion triggers xlog_gist_delete record. To verify this I use pageinspect and pg_waldimp (locally). Also this test is dependent on block size being 8192 which is not good. And all of this does not work actually without v1-0001, because there is a bug in GiST which does not call gistkillitmes for the very first (root) page. There is also test2.sql which inserts a single tuple, not 407. It can be used to verify v1-0001. [0] coverage.postgresql.org/src/backend/access/gist/gistxlog.c.gcov.html -- Best regards, Kirill Reshke --000000000000f1c110064867c830 Content-Type: application/octet-stream; name="test2.sql" Content-Disposition: attachment; filename="test2.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkf379ci1 Q1JFQVRFIEVYVEVOU0lPTiBwYWdlaW5zcGVjdDsKY3JlYXRlIGV4dGVuc2lvbiBidHJlZV9naXN0 OwpjcmVhdGUgdGFibGUgdChmIHRleHQpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSk7 CmNyZWF0ZSBpbmRleCBvbiB0IHVzaW5nIGdpc3QoZik7Cmluc2VydCBpbnRvIHQgc2VsZWN0IDE6 OnRleHQ7CnNlbGVjdCAqIGZyb20gZ2lzdF9wYWdlX2l0ZW1zX2J5dGVhKGdldF9yYXdfcGFnZSgn dF9mX2lkeCcsIDApKTsKc2VsZWN0ICogZnJvbSBnaXN0X3BhZ2Vfb3BhcXVlX2luZm8oZ2V0X3Jh d19wYWdlKCd0X2ZfaWR4JywgMCkpOwpkZWxldGUgZnJvbSB0OwpzZXQgZW5hYmxlX3NlcXNjYW4g PSBvZmY7IHNldCBlbmFibGVfYml0bWFwc2NhbiA9IG9mZjsKZXhwbGFpbiAoYW5hbHl6ZSwgY29z dHMgb2ZmLCB0aW1pbmcgb2ZmKSBzZWxlY3QgZiBmcm9tIHQ7CnNlbGVjdCAqIGZyb20gZ2lzdF9w YWdlX29wYXF1ZV9pbmZvKGdldF9yYXdfcGFnZSgndF9mX2lkeCcsIDApKTsK --000000000000f1c110064867c830 Content-Type: application/octet-stream; name="test.sql" Content-Disposition: attachment; filename="test.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkf379c60 Q1JFQVRFIEVYVEVOU0lPTiBwYWdlaW5zcGVjdDsKY3JlYXRlIGV4dGVuc2lvbiBidHJlZV9naXN0 OwpjcmVhdGUgdGFibGUgdChmIHRleHQpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSk7 CmNyZWF0ZSBpbmRleCBvbiB0IHVzaW5nIGdpc3QoZik7Cmluc2VydCBpbnRvIHQgc2VsZWN0IDE6 OnRleHQgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw0MDcpOwpzZWxlY3QgKiBmcm9tIGdpc3RfcGFn ZV9pdGVtc19ieXRlYShnZXRfcmF3X3BhZ2UoJ3RfZl9pZHgnLCAwKSk7CnNlbGVjdCAqIGZyb20g Z2lzdF9wYWdlX29wYXF1ZV9pbmZvKGdldF9yYXdfcGFnZSgndF9mX2lkeCcsIDApKTsKZGVsZXRl IGZyb20gdDsKc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOyBzZXQgZW5hYmxlX2JpdG1hcHNjYW4g PSBvZmY7CmV4cGxhaW4gKGFuYWx5emUsIGNvc3RzIG9mZiwgdGltaW5nIG9mZikgc2VsZWN0IGYg ZnJvbSB0OwpzZWxlY3QgKiBmcm9tIGdpc3RfcGFnZV9vcGFxdWVfaW5mbyhnZXRfcmF3X3BhZ2Uo J3RfZl9pZHgnLCAwKSk7Cg== --000000000000f1c110064867c830 Content-Type: application/octet-stream; name="v1-0001-Fix-gistkillitems-for-GiST-ROOT-page.patch" Content-Disposition: attachment; filename="v1-0001-Fix-gistkillitems-for-GiST-ROOT-page.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkf3oklr2 RnJvbSA4NGIwZmI2ZTFjZTU4YzdiOTE3ZmJjYzMyZTczY2FkY2QyNjVkNTM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByZXNoa2UgPHJlc2hrZUBkb3VibGUuY2xvdWQ+CkRhdGU6IFRo dSwgMTUgSmFuIDIwMjYgMDY6MzQ6NDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxXSBGaXggZ2lz dGtpbGxpdGVtcyBmb3IgR2lTVCAgUk9PVCBwYWdlLgoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMgICAgfCAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyB8 IDYgKysrLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggOWMyMTljYWRmMDcuLjJmMzQxZGY5MDU4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xNjgxLDYgKzE2ODEsNyBAQCBnaXN0cHJ1bmVwYWdl KFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiBoZWFwUmVs KQogCQkJCW1heG9mZjsKIAogCUFzc2VydChHaXN0UGFnZUlzTGVhZihwYWdlKSk7CisJQXNzZXJ0 KEJ1ZmZlcklzTG9ja2VkQnlNZUluTW9kZShidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSkp OwogCiAJLyoKIAkgKiBTY2FuIG92ZXIgYWxsIGl0ZW1zIHRvIHNlZSB3aGljaCBvbmVzIG5lZWQg dG8gYmUgZGVsZXRlZCBhY2NvcmRpbmcgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RnZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYwppbmRl eCAxMWIyMTRlYjk5Yi4uN2RjMzQ2ODBlMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RnZXQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMK QEAgLTQwNyw2ICs0MDcsOSBAQCBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBHSVNU U2VhcmNoSXRlbSAqcGFnZUl0ZW0sCiAJICovCiAJc28tPmN1clBhZ2VMU04gPSBCdWZmZXJHZXRM U05BdG9taWMoYnVmZmVyKTsKIAorCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2NrTnVtYmVyIGZv ciBnaXN0a2lsbGl0ZW1zKCkgY2FsbCAqLworCXNvLT5jdXJCbGtubyA9IHBhZ2VJdGVtLT5ibGtu bzsKKwogCS8qCiAJICogY2hlY2sgYWxsIHR1cGxlcyBvbiBwYWdlCiAJICovCkBAIC03MjIsOSAr NzI1LDYgQEAgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAKIAkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCQkJLyogc2F2ZSBjdXJyZW50 IGl0ZW0gQmxvY2tOdW1iZXIgZm9yIG5leHQgZ2lzdGtpbGxpdGVtcygpIGNhbGwgKi8KLQkJCQlz by0+Y3VyQmxrbm8gPSBpdGVtLT5ibGtubzsKLQogCQkJCS8qCiAJCQkJICogV2hpbGUgc2Nhbm5p bmcgYSBsZWFmIHBhZ2UsIEl0ZW1Qb2ludGVycyBvZiBtYXRjaGluZyBoZWFwCiAJCQkJICogdHVw bGVzIGFyZSBzdG9yZWQgaW4gc28tPnBhZ2VEYXRhLiAgSWYgdGhlcmUgYXJlIGFueSBvbgotLSAK Mi40My4wCgo= --000000000000f1c110064867c830--