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 1vtR9n-007e6P-2C for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 14:06:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtR9g-0083s7-2s for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 14:06:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vse1q-00FCbn-32 for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 09:39:31 +0000 Received: from mail-qv1-xf2d.google.com ([2607:f8b0:4864:20::f2d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vse1o-00000001CEd-0FOA for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 09:39:30 +0000 Received: by mail-qv1-xf2d.google.com with SMTP id 6a1803df08f44-8954c9daaeaso71045986d6.1 for ; Wed, 18 Feb 2026 01:39:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771407567; cv=none; d=google.com; s=arc-20240605; b=X5+bkBAcO+PA0FQ9bwYSOKXTTobcLwPjNvsAJzxzUA2JPUoQFjnaKexT9uyjWRyfqS xT/KckasCuDZKZQqxTyHWM2X5wh7NkaQ08sWm+I9W4iBSA9VES0omTuMAISX3E7ETEyH dFMvdJ1dSSaHQ8IqE+h8Am4sXghlMDQZIlRRr2ryp1JGVf9VnSX9JVQUk8GJexGO1dct WHs0nXjCU/i9i4UFbK+xZDV3CDcyTWjhM08fBm5H5JNpj0O3pdn+dkX1e/1bg78H7M3R +/qz8KYIOgnsKtgNQiGiKUfdS/CF/0CU6uF2SkC0uMj7Ueo5QxsE8pQvbywxG4SZgqAz 9ZQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=di3IqIwbWLomF+642aAZYJ9YDh2VsQr7xH46s1WNMzE=; fh=PqSsPu2DRy+yGjlCPlCZ6GDQseoow+Mo9NMhKxlDF2c=; b=JJLIxIwIPrCAX/kchmb1lSAKkF0Jm2/iYchuBFieY/OBjdc0sJ/tLvucf7KHaukVAz WiV+hZWy+T6aZ9wJXGrTsqbEwaQ4FbrorAPtEuhMiqIf62Qycu3lv/G4RxDiikbCVb1G b5oY3Kf1t7yshCsXxBQp8dTGcb/nf23uLsBH56ryfU6CP7hm2dxR25qKosnoxBDa6TON JOEwjLw2R3BXqa4C9yPUdS/vT6p9T7pN9v0cAmcF8p8G10EyXMIZt95kTvO+GR2hZHeL CN6LBwn/DzoPZsTKxJjrw3/MfKVrxwW9022bY7bjcgQusl+Nfc2N64zMIedQGTOXH+tM IaAg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771407567; x=1772012367; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=di3IqIwbWLomF+642aAZYJ9YDh2VsQr7xH46s1WNMzE=; b=3ctweZNkkpfkVFx0gAOrd+gm31uYe8WMbbYJGV2BJZWNWMED0irJyly7kE/y1gbZoD fc0X+/aacM/0aCOg2uene9ayoS4AXbInVMJJxnFih8O2D62V+YUlYaA5eVxAMsiH8jRk gdEJH9AWJhArGOGW9fE8BHO08xhEcdv8IyV6paRVSJQyRCvUR1pJkCNPtN93DkH/5emF dwMk0ZTJIMq+BPGift3j0jy1GCyXh4IRF7m76yCu5fbpAPJ0IEA5qZTdi8BUnKmA5ls0 7g72dJm3VjO7Oct3RlXFBx4g56U26NI1COvpobkthgIHq/0d7K+4Bo9yF+shbX28k1qJ IsIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771407567; x=1772012367; h=cc: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=di3IqIwbWLomF+642aAZYJ9YDh2VsQr7xH46s1WNMzE=; b=T0imZ/Zvfj7MPlWl6HAg4EZ2kgqic+Y9og/MeZZVxKK8N6WTJxOmlEzcMPMF37gW11 mVbyaerJ5WsWOrX0Zfj82Zzo/qbLa5shoa5Q1aJeAthu08RiD5oz3bAE1bLIVQEOzZXW Eg2qiCJDnYvixaiOgwUReriQsQ8ssG4VLUPXzjwiEeP9NHRBo4kddbGjF+G//8jLt4Lc g3MxmyE+zszemSvUqqVLO/fYOGYXEfloq6oRji14mv8+VmAxOMukbWf85aKsHDKQgCRq hg/rrwlQZ3MgwYmzjJYIEEHzhmyhb9ya3ac7pogM/hk3qcmV19xMK6QJ061v94UU3LFr 6s9w== X-Gm-Message-State: AOJu0YwIeAHrR1bEUhP5/Vw+ShF/Y2HLm7XWUDQhALhzdnWNyLil+Utv UDnLplJGcxmqwnbPb+ihNXR0JLqG0FN6S6CKd3Y/4xq2adgvRVdzkdSIhSjiqVyyYQoofrJN8qe Lz7aymqyp2cFtALbffKOxoU4ZJRU3/cEQFNqTIeNR9xyAdESBERRSe/o7 X-Gm-Gg: AZuq6aIt5jAsvxVE3eHkm5BngfxEHJ2lRUxmYuUkJ31cnAFe8MBZWdfkCJYWG5lf31f 6ZAireHtnjQLC59afWJm+kRn5yEsovlNy/zDWSx+cTJLLZffJWOPGAHNq2F0Sg8zZ7BDhK8V8E6 cuyFpN+Qjaap+DlMPVoxQ7kECcL97yP6XuBGAKKU+YOu7V090zLgFVx6mZrk1bW97xy1REnLuK/ 435LY7RS2YFy/mJOn1wt0nPoeIUd6GMSwrxU7LPRKeJ1pigezctMR7W79g2d8oa2UUE1Kp1j/FT IijjRwfqVys354g+6eoPNDM/9YiWKWFG3ty+SgoHEOPzL8jh X-Received: by 2002:a05:6214:250b:b0:894:562d:c0b9 with SMTP id 6a1803df08f44-897347d8296mr241212046d6.0.1771407566617; Wed, 18 Feb 2026 01:39:26 -0800 (PST) MIME-Version: 1.0 From: Siddharth Kothari Date: Wed, 18 Feb 2026 15:09:15 +0530 X-Gm-Features: AaiRm51iLLF6dm2fKYayH9TwRMT2zpomMhu1vAdvFX-nZtuXywimXRCRXEXMVbc Message-ID: Subject: [PATCH] Add RetrieveInstrumentation hook for CustomScan providers To: pgsql-hackers@lists.postgresql.org Cc: Vaibhav Jain , Madhukar Content-Type: multipart/mixed; boundary="000000000000c3f735064b15f685" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c3f735064b15f685 Content-Type: multipart/alternative; boundary="000000000000c3f733064b15f683" --000000000000c3f733064b15f683 Content-Type: text/plain; charset="UTF-8" Dear PostgreSQL Hackers, This email proposes a patch to enhance the CustomScan provider interface. The patch file, 0001-Add-RetrieveInstrumentationCustomScan-hook-for-Custo.patch, is attached. *Problem:* CustomScan providers currently lack a standard method to aggregate instrumentation data from parallel workers back to the leader process before the Dynamic Shared Memory (DSM) segment is unlinked. This makes it difficult to gather comprehensive performance metrics from parallelized custom scans. *Solution:* This patch introduces a new optional hook, RetrieveInstrumentationCustomScan, to the CustomExecMethods struct. This hook allows custom scan providers to implement logic to collect and consolidate instrumentation from shared memory or worker states during the parallel query cleanup phase. This hook is invoked via the new ExecCustomScanRetrieveInstrumentation function, called from ExecParallelRetrieveInstrumentation for T_CustomScanState nodes. Since the hook is optional (checked for NULL before calling), it maintains full backward compatibility. *Testing & Compatibility:* - The patch compiles and passes all core regression tests (make check-world) on my x86_64 instance. - The changes are not platform-specific. - Regression Tests: This patch provides a new *capability* for custom scan providers. Since the hook's functionality is only realized when implemented by an extension, specific tests would naturally reside within that extension rather than in the core regression suite. This patch does not directly address a specific item on the official TODO list but enhances the extensibility framework. I believe this patch is complete and ready for review. I look forward to any feedback and am happy to make revisions. I will also add this patch to the next CommitFest. Thank you, Siddharth Kothari --000000000000c3f733064b15f683 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Dear PostgreSQL Hacke= rs,

This email proposes a patch to enhance the CustomScan provider in= terface. The patch file,=C2=A00001-Add-RetrieveInstrumentationCustomS= can-hook-for-Custo.patch, is attached.

Problem:

CustomScan providers currently lack a standard method to aggregate= instrumentation data from parallel workers back to the leader process befo= re the Dynamic Shared Memory (DSM) segment is unlinked. This makes it diffi= cult to gather comprehensive performance metrics from parallelized custom s= cans.

Solution:

This patch introduces a new op= tional hook,=C2=A0RetrieveInstrumentationCustomScan, to the=C2= =A0CustomExecMethods=C2=A0struct. This hook allows custom scan= providers to implement logic to collect and consolidate instrumentation fr= om shared memory or worker states during the parallel query cleanup phase. = This hook is invoked via the new=C2=A0ExecCustomScanRetrieveInstrumen= tation=C2=A0function, called from=C2=A0ExecParallelRetrieveIns= trumentation=C2=A0for=C2=A0T_CustomScanState=C2=A0nodes= . Since the hook is optional (checked for NULL before calling), it maintain= s full backward compatibility.

Testing & Compatibility:

  • The patch compiles and passes all core regression tests (make check-= world) on my x86_64 instance.
  • The changes are not platform-specific.
  • Regression Tests:=C2=A0This patch provides a new=C2=A0capability=C2=A0for custom scan providers. Since the hook's functionality is onl= y realized when implemented by an extension, specific tests would naturally= reside within that extension rather than in the core regression suite.

This patch does not directly address a specific item on the offici= al TODO list but enhances the extensibility framework.

I believ= e this patch is complete and ready for review. I look forward to any feedba= ck and am happy to make revisions. I will also add this patch to the next C= ommitFest.

Thank you,

Siddharth Kothari

--000000000000c3f733064b15f683-- --000000000000c3f735064b15f685 Content-Type: application/x-patch; name="0001-Add-RetrieveInstrumentationCustomScan-hook-for-Custo.patch" Content-Disposition: attachment; filename="0001-Add-RetrieveInstrumentationCustomScan-hook-for-Custo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlru4cgo0 RnJvbSBhYzYwNDllOGIwYWYyMTY2NjMxNGVkYjczMDE4ZmQ5OTk0MGQwNzMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaWRkaGFydGggS290aGFyaSA8c2lka290QGdvb2dsZS5jb20+ CkRhdGU6IFR1ZSwgMTcgRmViIDIwMjYgMTI6MjM6NTYgKzAwMDAKU3ViamVjdDogW1BBVENIXSBB ZGQgUmV0cmlldmVJbnN0cnVtZW50YXRpb25DdXN0b21TY2FuIGhvb2sgZm9yIEN1c3RvbVNjYW4K IHByb3ZpZGVycwoKQ3VzdG9tU2NhbiBwcm92aWRlcnMgY3VycmVudGx5IGxhY2sgYSBzdGFuZGFy ZCBtZXRob2QgdG8gYWdncmVnYXRlCmluc3RydW1lbnRhdGlvbiBkYXRhIGZyb20gcGFyYWxsZWwg d29ya2VycyBiYWNrIHRvIHRoZSBsZWFkZXIgcHJvY2VzcwpiZWZvcmUgdGhlIER5bmFtaWMgU2hh cmVkIE1lbW9yeSBzZWdtZW50IGlzIGRlc3Ryb3llZC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBh biBvcHRpb25hbCBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbkN1c3RvbVNjYW4KY2FsbGJhY2sgdG8g dGhlIEN1c3RvbUV4ZWNNZXRob2RzIHN0cnVjdC4gVGhpcyBhbGxvd3MgY3VzdG9tIHNjYW4KcHJv dmlkZXJzIHRvIGltcGxlbWVudCBsb2dpYyB0byBjb2xsZWN0IGFuZCBjb25zb2xpZGF0ZSBpbnN0 cnVtZW50YXRpb24KZnJvbSBzaGFyZWQgbWVtb3J5LgoKVGhlIG5ldyBob29rIGlzIGNhbGxlZCBp biBFeGVjUmV0cmlldmVJbnN0cnVtZW50YXRpb24gZm9yIEN1c3RvbVNjYW5TdGF0ZQpub2RlcyBk dXJpbmcgdGhlIHBhcmFsbGVsIHF1ZXJ5IGNsZWFudXAgcGhhc2UuCi0tLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgfCAzICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUN1c3RvbS5jICAgfCA5ICsrKysrKysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUN1c3Rv bS5oICAgfCAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4dGVuc2libGUuaCAgICAgIHwgMyArKysK IDQgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Bh cmFsbGVsLmMKaW5kZXggZjg3OTc4YzEzN2UuLmMyNDE2YTk4MTcwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFyYWxsZWwuYwpAQCAtMTExOCw2ICsxMTE4LDkgQEAgRXhlY1BhcmFsbGVsUmV0cmll dmVJbnN0cnVtZW50YXRpb24oUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCWNhc2UgVF9CaXRtYXBI ZWFwU2NhblN0YXRlOgogCQkJRXhlY0JpdG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbigo Qml0bWFwSGVhcFNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCQkJYnJlYWs7CisJCWNhc2UgVF9D dXN0b21TY2FuU3RhdGU6CisJCQlFeGVjQ3VzdG9tU2NhblJldHJpZXZlSW5zdHJ1bWVudGF0aW9u KChDdXN0b21TY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0Ogog CQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3Rv bS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3RvbS5jCmluZGV4IGE5YWQ1YWY2YTk4 Li5mMDI3ZDI0OTkzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUN1c3Rv bS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVDdXN0b20uYwpAQCAtMjE3LDYgKzIx NywxNSBAQCBFeGVjQ3VzdG9tU2NhbkluaXRpYWxpemVXb3JrZXIoQ3VzdG9tU2NhblN0YXRlICpu b2RlLAogCX0KIH0KIAordm9pZAorRXhlY0N1c3RvbVNjYW5SZXRyaWV2ZUluc3RydW1lbnRhdGlv bihDdXN0b21TY2FuU3RhdGUgKm5vZGUpCit7CisJY29uc3QgQ3VzdG9tRXhlY01ldGhvZHMgKm1l dGhvZHMgPSBub2RlLT5tZXRob2RzOworCisJaWYgKG1ldGhvZHMtPlJldHJpZXZlSW5zdHJ1bWVu dGF0aW9uQ3VzdG9tU2NhbikKKwkJbWV0aG9kcy0+UmV0cmlldmVJbnN0cnVtZW50YXRpb25DdXN0 b21TY2FuKG5vZGUpOworfQorCiB2b2lkCiBFeGVjU2h1dGRvd25DdXN0b21TY2FuKEN1c3RvbVNj YW5TdGF0ZSAqbm9kZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVD dXN0b20uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVDdXN0b20uaAppbmRleCBmYjBhY2M2 ZTQxNC4uMGE5Y2ZiNDAzODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVD dXN0b20uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQ3VzdG9tLmgKQEAgLTM3LDYg KzM3LDcgQEAgZXh0ZXJuIHZvaWQgRXhlY0N1c3RvbVNjYW5SZUluaXRpYWxpemVEU00oQ3VzdG9t U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkJCSAgUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4 dGVybiB2b2lkIEV4ZWNDdXN0b21TY2FuSW5pdGlhbGl6ZVdvcmtlcihDdXN0b21TY2FuU3RhdGUg Km5vZGUsCiAJCQkJCQkJCQkJICAgUGFyYWxsZWxXb3JrZXJDb250ZXh0ICpwd2N4dCk7CitleHRl cm4gdm9pZCBFeGVjQ3VzdG9tU2NhblJldHJpZXZlSW5zdHJ1bWVudGF0aW9uKEN1c3RvbVNjYW5T dGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjU2h1dGRvd25DdXN0b21TY2FuKEN1c3RvbVNj YW5TdGF0ZSAqbm9kZSk7CiAKICNlbmRpZgkJCQkJCQkvKiBOT0RFQ1VTVE9NX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4dGVuc2libGUuaCBiL3NyYy9pbmNsdWRlL25vZGVz L2V4dGVuc2libGUuaAppbmRleCA1MTdkYjk1YzRhMy4uY2RhNDc4YjUzOGYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL2V4dGVuc2libGUuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eHRlbnNpYmxlLmgKQEAgLTE1MSw2ICsxNTEsOSBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21FeGVj TWV0aG9kcwogCQkJCQkJCQkJCQkgICB2b2lkICpjb29yZGluYXRlKTsKIAl2b2lkCQkoKlNodXRk b3duQ3VzdG9tU2NhbikgKEN1c3RvbVNjYW5TdGF0ZSAqbm9kZSk7CiAKKwkvKiBPcHRpb25hbDog cmV0cmlldmUgcGFyYWxsZWwgaW5zdHJ1bWVudGF0aW9uICovCisJdm9pZAkJKCpSZXRyaWV2ZUlu c3RydW1lbnRhdGlvbkN1c3RvbVNjYW4pIChDdXN0b21TY2FuU3RhdGUgKm5vZGUpOworCiAJLyog T3B0aW9uYWw6IHByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gRVhQTEFJTiAqLwogCXZv aWQJCSgqRXhwbGFpbkN1c3RvbVNjYW4pIChDdXN0b21TY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJ CQkgIExpc3QgKmFuY2VzdG9ycywKLS0gCgoK --000000000000c3f735064b15f685--