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 1w0JsL-001o98-24 for pgsql-general@arkaria.postgresql.org; Wed, 11 Mar 2026 13:45:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0JsJ-009FE0-37 for pgsql-general@arkaria.postgresql.org; Wed, 11 Mar 2026 13:45:24 +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 1w0JsJ-009FDs-1z for pgsql-general@lists.postgresql.org; Wed, 11 Mar 2026 13:45:24 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0JsH-000000028tg-3vHv for pgsql-general@postgresql.org; Wed, 11 Mar 2026 13:45:23 +0000 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-439c5b40f60so6724674f8f.0 for ; Wed, 11 Mar 2026 06:45:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773236721; cv=none; d=google.com; s=arc-20240605; b=YWkGcKyV7L2IePvd/xSKrcJWhKZ/J0om5e9rrIu3iJfhfbzLezL2dEDpFzT+mHSJNk DRXotZ1cDlCnsPquzC+bowBGpRIeczCm3NTp0g3fP9QDe1MsTAD1SUE9INWHKyiL5HBv +HOG80AsnnE8Y42Nq82CEH19OfbGwu3qw9FQ3EZe1ZxuxlGVLvEIAFH4kFgS1/trjXAl DWUiRSuIfA4gMavGCXk7qWGqZT0Wj0HjskFwB0bybDZmlGoXwL57hhg608TujIeCQgEv z053ViaMYdOIywxoAkGmIpn7UhAiQSB8ase41jx79guxWDXZe/msDULjea6nPjeI6o66 FqvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=9BCul2lrXd+SjPGN8NybQ91CVWaTW9movhpC9IBUrSA=; fh=x9Jmr8+FtiCQKUvo/7/je6SkcsG+V48pI/LmEXQOSec=; b=bGBANDggv5oJa0mOhVgZ0twesleAzyLKugb70baXvAWrt86zU7mITQxJr9yEyS1azQ qv+YlXzVpvqZEC02Z6uj7FZqAs+CrG68HruUaRw/g1Y2GxFIL3Mcfs3VIl0W8VZ+Etsw d5BDhcRAMA8+Pu+MKcpk5czUstrBDmB4vz70DzuhPC/FVztbCzgLO/juqNbgZw1L7YN+ 1UhXV3lBiHKjUwULBYxDx0qE2SUX9L4aL0tz/jlHcf+53j0I45LcCkXZmuWGBVqOznqK 0zKFFKBrZU5MaMcnFdMMr65S8+pX5bnGjTaHEExtFSb8T3w+PvGysaycufXPlZrADSMv z8pA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773236721; x=1773841521; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=9BCul2lrXd+SjPGN8NybQ91CVWaTW9movhpC9IBUrSA=; b=E7fXd17iPFKGOPReLsI5EFBCVHPkixKTlb7mG0cX+KAg6bSkLgRRHD3NbjeKsMVB5b mjBCAtlyMy2eluWsOgsWOOW32CZ1aQceJLz82MWNpNr5+WteEzHdhsFjkvN/SEMBlzdJ tv5Gaee0slioYv0A6gsMb6cpvjDutPoPy16bER+Ro6HQDZnmdIYbF9h347H+RtK27jXr vLmXDYj1YTD35H+1spKqhdbhtAx6J2XVUG4uPlliaZiRiPBpf/Tl+/DCxmW3blFphHFg EMII/EWq2WYnv1X1ogaRtrrTBZquBV52BV91HuJk9TKXsc4qBjQU9JRuj2iWREEM8EwU tpsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773236721; x=1773841521; 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=9BCul2lrXd+SjPGN8NybQ91CVWaTW9movhpC9IBUrSA=; b=dK2gWt1qxMplsFBoThI3SykY3DHch73kUGIx3Y1jSMvsyy6aR9x8gmepzMQShnHbR0 eajeN+0Ajah2cAcfJ/2Ist/jn/CEkPSIdGjbZM1vwMJeCVe0G44TvjIYDHipuECjaFQD bm1AP7brHX7EHtXPShRasMKqnKgMQTlltkhAMDnoUmk5E7vjUy/+6MUs2W3sgYdFDxhG E9/rAWplZd67BTrEvGXHmyZYV9ZPx/spSJhGmldYkWLNE8FgPSfEgig6JsDdFhAMTPCE joSj3BS/llxuTU6hHEUv6mHoqsEgkln7X48HcY1aaUo4kQmO8OwU4q+SfK9JR2rXffMj Ep6w== X-Gm-Message-State: AOJu0YwMj7fnNhFtu796fypNBGIKeYTx6hJ8l3RaMYYojKygVLND5+m6 MzH0NE15MTtDTpZe4JSEvs2MsXfIpmVdrUsTPLBZO2/AnOdKTDZ28sHFuT2AvpDUj1UAx7rwu4v kyX6EvOXWItw53Mdv5gswkZ+9Nkck1zaSVTgJ0cI= X-Gm-Gg: ATEYQzxcMJMA5xQ1+rQMBTpTY1u30DP0cGPfac04ZGrlQeXIAQZ7B+ZLDP1d07S/5hq tFIy3Wh0yk2sUfm58HgpVhtHpd32twTiMTN+VtxjOBUvhAjfh+jVTulcAJ61/h5nd/sFzaWrv8X f8SnXamBNYj2ap3ZgbFPcV7EYwmVnrjIvp/O0MOyyTyPuFf+2cg953r5xiDCao9/kvxxg2Wpir2 ny2sLXwgXTfeQ3hm74tHkkDwtklordXT+qt1topkjHMw/uO8GmPcQxJhpfyzdE+soUBikKR7Yq8 qafpBnQYI84lzU0BcA== X-Received: by 2002:a05:6000:420d:b0:439:ca85:8848 with SMTP id ffacd0b85a97d-439f81c71bfmr5650737f8f.16.1773236720494; Wed, 11 Mar 2026 06:45:20 -0700 (PDT) MIME-Version: 1.0 From: Shiju Sivadazz Date: Wed, 11 Mar 2026 19:15:08 +0530 X-Gm-Features: AaiRm53R3PnRQmd0dXCmzqwOcNRrEU0A4mB8KciJj-0ruFe-Tu7r1-GMMUzKjZc Message-ID: Subject: Question about heap_inplace_update and VACUUM behavior To: pgsql-general@postgresql.org Content-Type: multipart/alternative; boundary="000000000000d3ee14064cbfd84f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d3ee14064cbfd84f Content-Type: text/plain; charset="UTF-8" Hello PostgreSQL Hackers, I am currently exploring the PostgreSQL source code to better understand the internal storage and update mechanisms. While reviewing the heap access methods, I noticed the function heap_inplace_update() in the source code with the following comment: /* * heap_inplace_update - deprecated * * This exists only to keep modules working in back branches. Affected * modules should migrate to systable_inplace_update_begin(). */ From my understanding, PostgreSQL generally follows the MVCC model, where updates create a new tuple version rather than modifying the existing tuple in place. This raised a few questions for me: 1. Does PostgreSQL still support any form of in-place updates internally, or is this function strictly kept for backward compatibility? 2. What types of system catalog operations (if any) rely on in-place updates through systable_inplace_update_begin()? 3. Since in-place updates do not generate a new tuple version, how does VACUUM interact with such updates? Does it need to handle them differently compared to normal MVCC updates? 4. Are there any performance or concurrency considerations that influenced the decision to deprecate heap_inplace_update in favor of the newer APIs? I would greatly appreciate any clarification or references to relevant documentation or design discussions. Thank you for your time and for the incredible work on PostgreSQL. Best regards, Shiju Software Developer Currently studying PostgreSQL internals --000000000000d3ee14064cbfd84f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hello PostgreSQL Hackers,

I am currently explorin= g the PostgreSQL source code to better understand the internal storage and = update mechanisms. While reviewing the heap access methods, I noticed the f= unction=C2=A0heap_inplace_update()=C2=A0in the sou= rce code with the following comment:

/*
 * heap_inplace_update - deprecated
 *
 * This exists only to keep modules working in back branches. Affected
 * modules should migrate to systable_inplace_update_begin().
 */

From my understanding, PostgreSQL generally follows the = MVCC model, where updates create a new tuple version rather than modifying = the existing tuple in place.

This raised a few questions for me:

<= ol start=3D"1">
  • Does PostgreSQL still supp= ort any form of in-place updates internally, or is this function strictly k= ept for backward compatibility?

  • W= hat types of system catalog operations (if any) rely on in-place updates th= rough=C2=A0systable_inplace_update_begin()?

  • Since in-place updates do not generate = a new tuple version, how does VACUUM interact with such updates? Does it ne= ed to handle them differently compared to normal MVCC updates?

  • Are there any performance or concurrency cons= iderations that influenced the decision to deprecate=C2=A0heap_inplace_update=C2=A0in favor of the newer APIs?

  • <= p>I would greatly appreciate any clarification or references to relevant do= cumentation or design discussions.

    Thank you for your time and for th= e incredible work on PostgreSQL.

    Best regards,
    Shiju
    Software D= eveloper
    Currently studying PostgreSQL internals

    --000000000000d3ee14064cbfd84f--