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 1vRCLg-009BEB-3A for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Dec 2025 16:38:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRCLf-003ZgG-3C for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Dec 2025 16:38:32 +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 1vRB7o-0036ZI-2m for pgsql-hackers@lists.postgresql.org; Thu, 04 Dec 2025 15:20:09 +0000 Received: from gmmr-3.centrum.cz ([2a00:da80:0:502::8]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vRB7n-0037f1-0F for pgsql-hackers@lists.postgresql.org; Thu, 04 Dec 2025 15:20:08 +0000 Received: from gmmr-3.cent (localhost [127.0.0.1]) by gmmr-3.centrum.cz (Postfix) with ESMTP id 7CFEF203F1C7; Thu, 4 Dec 2025 16:20:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atlas.cz; s=mail; t=1764861605; bh=9aJGbSCSVOcFf14UI+0ej+TRGKgR83B6Q9r4mRJ4zDI=; h=Date:To:Cc:From:Subject:From; b=ajj4vDRrdI5T45Bz7diWOMbDBLB0Qi+01Zczq9Kya8dU7vPqGtmBlOcm85qC0WSW3 zY0lVMx0CHBMBTDJUpZgPMxMlo7RAzv+kVKeQwQFBhSJce5kQVDLD1i7sWb2IAGsXx TB2gPGlJChaFWoqp7xKtFfnFRFF0ZwpzUutIlKMw= X-SpamDetected: 1 Received: from antispam68.centrum.cz (envoy-stl.cent [10.32.56.18]) by gmmr-3.centrum.cz (Postfix) with ESMTP id 278E21FF6; Thu, 4 Dec 2025 16:17:52 +0100 (CET) X-CSE-ConnectionGUID: EP//MQUZSiimc9umkedwGg== X-CSE-MsgGUID: aapF//P8Qem5SR4Zkuj0Nw== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A2G5wgA4pTFp/0vj/y5QCoEJCYFJgVYCghCGG4geiVaEP?= =?us-ascii?q?oc8hjWBIIh5gVYTgWsPAQEBAQEBAQEBCRQBPAQBAYUHjGonPAINAQIEAQEBA?= =?us-ascii?q?QMCAwEBAQEBAQEBAQEBCwEBBgEBAQEBAQYGAQKBHYYJU4JbhDEPAQVBGw0NA?= =?us-ascii?q?hEVAl8UAQGCfoI6ATmzMYEyGgJl3HUCgSUfgW2BHSwDAYVsgkobAXOFNoRzg?= =?us-ascii?q?VVEgTyDAz6DfBpsDoMOgmkEgiKBDoYfkzpSeBwDWSwBVRMXCwcFgSBDAyo0L?= =?us-ascii?q?SNLBS0dgSMhHRcTYFRAg0kYBmcPBoERGUkCAgIFAkA6gWYGHAYcEgIDAQICO?= =?us-ascii?q?lUMgXcCAgSCFX2CCg+IAoEIBS6BIgIBC209NwkLGwY9mA2BFYF5V1OTAoMVr?= =?us-ascii?q?2w0B4QfgV4GDIJehiqWZAYPBC+XZhcDkmuZBiKjRoVYghaBaDMag1tRGc8Kg?= =?us-ascii?q?TMCBwEKAQEDCZIegUsBAQ?= IronPort-PHdr: A9a23:hoMZEhHSdX4ZYTE92i1qkJ1Gf1FKhN3EVzX9CrIZgr5DOp6u447ld BSGo6k20BmRBc6GuqoMy7KP9fy7AipYutfJmUtBWaIPfidNsd8RkQ0kDZzNImzAB9muQgoEW e9vbxtbxUy9KlVfA83kZlff8TWY5D8WHQjjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1M R66sRjdutMZjIZsJas90AfFrmdHd+lWwW5kOU+YkxLg6sut5pJu/Cpdtvw7+8JcX6j2erkzQ KBFAjghL20668rnuAXZQwCS/HUcSGIWkhRJAwjB8h73W4r6vzX5uORgxiSUJNX6Q78sVzut9 qtmVhDmhjofOzE27G/YhMpwjLlGoB26vBxw35TUYICOO/VgeK7WYM4XSnBAXsZVUCxBH5+8Y o4SBOcPIepUs4/wrEYIoBCjBwejGfnvxydLiHH40qI13fovHB/G0gI9A90Av2/ZrMn2OaoIT ey50LfEwDfFYvhL2Tn98o/IchU5rP+CR71wb8vRxlQyHA3AilWQqI/lMCmI3ekKrmeU9fRgV eOyhGI9qAFxpjmvxsQ2hYTSnI0V1lTE+j9iwIovOdK5SVd2bNi5G5Rfqy+ULZF5Qt8+Q252o iY6zKULtJ21cSUJx5oq2hrSZfyFfoWW4x/uV+mfLSpmiX9qeL+xiRi8/Va9x+D8UsS5zVRHo jZbn9XQtn4A1QHf59aGR/Z740yv2i6P2hjc5+xFO0w4i6rWJp47zrIuiJYes17PEy32lUnui KKbeV8o9vW15+j5eLnrpIOQO5V0hwzxNKklh9axDv4iMgcUWmiW4eG81Lr+8kLnWLhKlfg2k rXBsJDdOMQbura1Aw9L3YYn7BayFzim0NEBkXkcKVJFZAqHg5X0N13UPP/3E/G/g0i2kDd2w vDKJKHuA5TVInjClrfuY6p95lZTxQcy19xT+ZJZB7EbLP7tREP8tsbUAx05PgCsxuboEtR91 ocQWWKVBa+ZNbvfvkKS6eIxIumDeZUZuDX5K/gk5P7hl2Q0lkUBfamtx5QXc2q0EehnIkmBe 3rjns8BEXsWvgo5VOHlklmCUSBTZ3msRaI8/C80BZm8AofHWICtgKaN3CG8HpFPZ2BGEkqAE XDyd4WLQ/sMcj6dItd9kjwYUrisU5Uu1RG1uQDmy7toNfTb+jcEtZ39yNd5/ffclQ0q+TxuE 8udy32NT31znm4QRT823bpwoUpnxlee16h4guJYGsJJ5/NSSAg6MZ/cz/B6Ct3pVQLBe82GS FeiQtm8HT4xSdcxz8cUY0lhA9WikgzD3y2yDr8QlryLBIY78qPY33j3JsZ9yGzJ1K07gFgmX MRPKHarhqF69wfJBo7Jl1+VmLqtdaQZxCLN7nuMzXKSvEFEVw59Sb3FXX8EZkvPqdT1/0PCQ KWyBrQkLARB09WCJ7BOat3ollVGWOzjNM7GY2K2gGewGRmIxqmSY4rxYmUd2D/RCE8ekwAc5 XqGLxQxBj+9o2LCCzxjDUjvY0T3/uRlp3K6T040zwWOb0J7zba1/AAaheCER/MVxb0LoD0hp ClsHFahw9LWDMKNqgt5cKpBYtM94VJH2HrBuQJyMJOuMbxsi0IYfVc/g0S73hFpCohai8UCp Xc0zEx0LueZyBVGbTzclZnwErbGIGTo4B2kLafKiX/E19PD1q4R6fhwiFHivwjhQkYr7XRrl dpR0niVzpzWCAMJF5njBBVkvyNmrq3XN3Fur7jf0mdhZPHcjw== IronPort-Data: A9a23:IMr0x6/hNnk4itk3cmUADrUDuH+TJUtcMsCJ2f8bNWPcYEJGY0x3z jEdCjzQbqnYa2PxcthzYN7jp0kPvsKEyINiQAJp+SFEQiMRo6IpJzg4wmQcnc+2BpeeJK6yx 5xGMrEsFOhtEDmE4E3ra+G7xZVF/fngbqLmD+LZMTxGSwZhSSMw4TpugOdRbrRA2LBVOCvT/ 4mqyyHjEAX9gWMtaDpIs/jrRC5H5ZwehhtJ4zTSWtgU5Dcyp1FNZLoDKKe4KWfPQ4U8NoaSW +bZwbilyXjS9hErB8nNuu6TnpoiH9Y+lSDX4pZnc/DKbipq/0Te4Y5nXBYoUnq7vh3S9zxH4 I4U6cHvE1dB0prkw4zxWzEAe8130DYvFLXveRBTuuTLp6HKnueFL1yDwyjaMKVBktubD12i+ tQ1EHdKSym+tdm3wbewG/RphckvM+bkadZ3VnFIlVk1DN4pRNXYRrnSvIYe1zo2mtpTGLDVd aL1axIzMlKaPkAJYA1ITs1j9AurriCXnzlwpFuLpKZx4GzSzwVZ2aTpOcGTcc7iqcB9xx7J/ TicrjWkav0cHNWW0RTCtUr8v+LKwBjBBLARCb/g0OE/1TV/wURWUnX6T2CTqP2nikOkQd93I kgK+mwoqu0z7AqsVNaVdxS4iHWVtBMGR9dbVeQmgCmPy6PSpRufB3YJVCVIbN06pec5QDUr0 hmCmNaBLTlusLSUTXSc9b6QpCK/JAAaKGYDYWkPSg5ty8Hsu5g3yxLGRdVuCrWditzuBSq22 zeRsCckiq4KiYgMzarT1UrAiRq8tJnNSgdz4AjLNl9J9SslOsj/OtHuswKEq6kdRGqEcmS8U LE/s5D2xIgz4Vulz0RhnM1l8GmV2su4 IronPort-HdrOrdr: A9a23:sMzzSK7kgqQ2o4tjtAPXwN/XdLJyesId70hD6qm+c3xom7+j+f xG+85rsSMc6QxhPU3I9ursBEDtewK+yXcX2+Us1NWZNjUO0VHAROpfBODZsl/d8kPFl9K1mZ 0OT5RD X-Talos-CUID: 9a23:5LDnkWyktW0eYeq0kjd3BgU5IodiV0Tg/kzRIkqzWHtsS7CZVnCfrfY= X-Talos-MUID: 9a23:gUdy6glKaYVPq2TSpH8jdnprPd9GpOOWWHkAlMg9gZW2NjFyYxGC2WE= X-IronPort-Anti-Spam-Filtered: true X-SpamDetected: 1 X-IronPort-AV: E=Sophos;i="6.20,249,1758578400"; d="scan'208";a="109322995" Received: from unknown (HELO gm-smtp11.centrum.cz) ([46.255.227.75]) by antispam68.centrum.cz with ESMTP; 04 Dec 2025 16:17:51 +0100 Received: from [192.168.0.55] (ip-94-112-70-54.bb.vodafone.cz [94.112.70.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by gm-smtp11.centrum.cz (Postfix) with ESMTPSA id 97A1F10032329; Thu, 4 Dec 2025 16:17:51 +0100 (CET) Message-ID: <84a6d065-1dc3-4b37-af7b-75904d967ab4@atlas.cz> Date: Thu, 4 Dec 2025 16:17:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: cs To: alvherre@alvh.no-ip.org, ah@cybertec.at Cc: jian.universality@gmail.com, pgsql-hackers@lists.postgresql.org, mihailnikalayeu@gmail.com, rob@xzilla.net From: David Klika Subject: Re: Adding REPACK [concurrently] Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello Great to hear about this feature. You speak about table rewrite (suppose a whole-table rewrite). I would=20 like to share idea of an alternative approach that also takes into=20 account amount of WAL generated during the operation. Applicable to=20 non-clustered case only. Let's consider a large table where 80% blocks are fine (filled enough by=20 live tuples). The table could be scanned from the beginning (left side)=20 to identify "not enough filled" blocks and also from the end (right=20 side) to process live tuples by moving them to the blocks identified=20 by=C2=A0the left side scan. The work is over when both scan reaches the s= ame=20 position. Example: _ stands for filled enough blocks D stands for blocks with (many) dead tuples 123456789 ___DD____ Left scan identifies page #4 and tuples from the right scan (page #9)=20 are moved here. The same with tuples from #8 to #5. Two pages from the=20 data file are trimmed and (only) pages #4 and #5 are written in WAL,=20 others are untouched. Regards David