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 1vyPNL-0005e1-31 for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 07:13:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyPNJ-003DTu-1Z for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 07:13:29 +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 1vyPNJ-003DTm-0I for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 07:13:29 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyPNG-000000018xm-3EwI for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 07:13:29 +0000 Received: by mail-qv1-xf34.google.com with SMTP id 6a1803df08f44-899efe93d4eso69820006d6.2 for ; Thu, 05 Mar 2026 23:13:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772781205; cv=none; d=google.com; s=arc-20240605; b=JZsD8OBIymaeQTS9aEInniZCJnWAVTRDWBwD8ZnRZhLC5b1H3Yn2iceLdQ3cQ/JQkr Tcm0G5YJ77KbMpQHHoe3cuBi7IyU0CGM5G5yjbwCoX6UWsvOfKwIp5qAD2eWkJSaGk4D 0Hq3VZgfKGdY+K2Ja9LeZDAg5j5kswrISjZ7YhbsmUQpBRg+CP8MEegJf3vS4J9pQ3EA HfTAkU0cG2Jg/zA9DyXv+JFjfp0/WeUk5rwpQJBWWLjiqYa/uqVP2Yw8rJktVuBfSTP0 6R/8pzPwk7uUUA6HG0IVHpaGigdrRVnnOA643st6OrnY+Sy7sa4v8l3eAhX3shwKF6r7 pbGw== 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:in-reply-to:references :mime-version:dkim-signature; bh=2Pdk1hhFY6Tg5UbSIUV5OCkrUo1oIB0xM4+5DaSpZn0=; fh=x4xgi4tdDukVB0fBuAIe3vORvD36rbbTBlhrrGN8QbM=; b=VtdguASzIW3qIFg90T0EANED5abq0gNwdWVROt+7HyNMUPl7bwdWTpFcvCJJUjxG+K qGKkNNY5aPSVoadYv4lwXky6fD6FsmnE5kQidKBbeu4VPCiPOshRNpEry2C/jVbR3oAY MwVEmlWUeBy/EEQDyx5yKG1f8XJjAMvVWr8Vk9W5YfoXJhLWMXQkDTRAY6vkqnvDK9Us MMy+Z1DBVpb6WsR+ZFGBrNfw9b+cdaab8u7m5anjuAGqN5CFOvNYe9g0ToM3iRx92NI0 iKOaF0+AfKUjyILZpTAM0NFK9+Z4XhV/Ar9f7Xcmp/3DOcZp4SOl/r6aQOFNciDJnU1m Jijw==; 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=gmail.com; s=20230601; t=1772781205; x=1773386005; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2Pdk1hhFY6Tg5UbSIUV5OCkrUo1oIB0xM4+5DaSpZn0=; b=bfYqBvxomu/yfXlwoBOtffsfMLYAzhgKMzAzynV3ihQImW5KIwPAzObd4okTvj2xDD L99/355oNep2xZssvt1cOK3iQtnb/Xyel37TDaWgmjQGusM2JqWytTajxZk9k75v9J7g nNojY+9Z25MO/O5jHO1dWJ55U5X4OZbS2MDzgfq5tRGXe+0h5CowywARpFRhUz35Ucub fWcwt5Uv9U0ZfHfk/+JnGBUsDi5t/l8m/9LeeLp/R95aUdsJjgRUlSUeqgdgO/kedIcs jlh/7qSopG6/9F7hfx3IoQQubMEZbwqvKL6U7X1F/9h+I6SrAZOK6RpBhlflk3HFTof1 q+rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772781205; x=1773386005; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2Pdk1hhFY6Tg5UbSIUV5OCkrUo1oIB0xM4+5DaSpZn0=; b=iYMmg4w3Ld/879KlS9fRSRkDAnZKtz7stZDgtEuPN4+mIurTSpXG1nh1zVHMyp0o/B wVKTu5Puns34679zkP1eTUg8Ii4bUARVBsCQmxcKGOqZksvmJ/6aYiQJP8R0F9IUEyPT DIMLP+HDXXsxgGVFcbI/XjyQwcRYZdK1lxFxFhPER0sLdPrtFkFT8M6VIwGZZHFVUSyH gXGBaAroyybIAvnLKHSsNAfxsQ8sTbidC/Yrm0eVfHbyxK4jg9oLhp2GejBgKBvcpDeM ZimHhEAWjk2SaU8oK52DN7mu9KXM9IfewK8tHR3X1wEK/8t+UibVZj/RF2wY1qkYXuFV WYEQ== X-Gm-Message-State: AOJu0YwQVE7WpXGyFINFI1albX0nu7G1WVxB+u6sS0drPThFZvWHF6kH u8xWet2WtbMjCtnhmeu6+HjR4Ajm5Shw521sP6DvDd3IyXuK1xUhclcf7DhLmZVf33CtflJE3WP KjzSGl+pIfvapnKZCQN1dvjyD6x1duA== X-Gm-Gg: ATEYQzx6FdoTGp7vGdhgOEMfaJFcW4VDaWr0RjhWcau+l1pMJOKRfS0XhuOj0ekTO8C 2Fv8M9necHANW9z0+R7eXxXTHUNujGhnhy/vPf9L16063SuF1S6aof1GgIq7AndrFhnxvmi72bc AJs54OcfB5tKYMOW5ly7aX4GWopH3adIQRXaiYYpYghbZ8e/IIViUvCfrEA5L8dhwjVKEIthCc8 F7r5fsTEETACxTTZlMmC6NK0eIz6jTjZ3dqXH9bN3ISaRbwlxyTGCPjiguPod8Ml7Mk2StUxAGX qcl/bjIXU2+FcduP X-Received: by 2002:ad4:5fcc:0:b0:899:fa9a:98fc with SMTP id 6a1803df08f44-89a30aceaaamr12732826d6.43.1772781205170; Thu, 05 Mar 2026 23:13:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Shinya Kato Date: Fri, 6 Mar 2026 16:12:48 +0900 X-Gm-Features: AaiRm52DLhaj-Ro_sb7RSe8c2Aa60jC7xKm7-rvBTS3f-CdxWP2Fc06HgXEFSbI Message-ID: Subject: Re: pg_stat_replication.*_lag sometimes shows NULL during active replication To: Fujii Masao Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ffcab3064c55c925" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ffcab3064c55c925 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 2, 2026 at 11:44=E2=80=AFPM Fujii Masao = wrote: > With the patch applied, I set up a logical replication and inserted a row= every > second. Even with continuous inserts, NULL was shown in the lag columns o= f > pg_stat_replication. That makes me wonder whether the patch's approach is > sufficient to address the issue. Thank you for the review and testing! I had only considered the issue in the context of physical replication, but as you pointed out, my approach is insufficient for logical replication. > Relying solely on replies from the standby or subscriber seems a bit frag= ile to > me. If the goal is to keep showing the last measured lag for some time, > perhaps we should introduce a rate limit on when NULL is displayed in the= lag > columns? My primary goal was to ensure that the source code comments match the actual behavior, as the comment stating "the second such message must result from wal_receiver_status_interval expiring on the standby" is inaccurate. However, as you noted, the patch alone is not sufficient to fully address the issue. > For example, if there has been no activity (i.e., sentPtr =3D=3D applyPtr= and > applyPtr has not changed since the previous cycle) for, say, 10 seconds, > then we could allow NULL to be shown. Thought? I considered a time-based rate limit, but it is difficult to choose an appropriate threshold. Furthermore, the walsender has no way of knowing the standby's or subscriber's wal_receiver_status_interval setting. The attached v2 patch takes a different approach: it additionally requires that all reported positions (write/flush/apply) remain unchanged from the previous reply. This directly detects a truly idle system without relying on timeouts=E2=80=94if any position has advanced, ne= w WAL activity must have occurred, so we should not clear the lag values even if the lag tracker is empty. -- Best regards, Shinya Kato NTT OSS Center --000000000000ffcab3064c55c925 Content-Type: application/octet-stream; name="v2-0001-Fix-spurious-NULL-lag-in-pg_stat_replication.patch" Content-Disposition: attachment; filename="v2-0001-Fix-spurious-NULL-lag-in-pg_stat_replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmek445t0 RnJvbSA4ZGU5ZDkwNGQ3MGMzNjJjYTJhZjAwYmQ0ZTczYzJhZDNiZGE5YjZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgNiBNYXIgMjAyNiAxNjoxMDo1OSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IEZpeCBzcHVyaW91cyBOVUxMIGxhZyBpbiBwZ19zdGF0X3JlcGxpY2F0aW9uCgpQcmV2aW91c2x5 LCBQcm9jZXNzU3RhbmRieVJlcGx5TWVzc2FnZSgpIGNsZWFyZWQgcmVwbGljYXRpb24gbGFnIHRp bWVzCndoZW5ldmVyIHRoZSBzdGFuZGJ5IHJlcG9ydGVkIGZ1bGx5LWFwcGxpZWQgV0FMIGluIHR3 byBjb25zZWN1dGl2ZQpyZXBseSBtZXNzYWdlcy4gIFRoaXMgaGV1cmlzdGljIHdhcyB0b28gYWdn cmVzc2l2ZTogaW4gYnVyc3R5IHJlcGx5CnBhdHRlcm5zIG9uZSBtZXNzYWdlIGNvdWxkIGNvbnN1 bWUgYWxsIGxhZyB0cmFja2VyIHNhbXBsZXMsIGFuZCB0aGUKbmV4dCBtZXNzYWdlIC0tIGFycml2 aW5nIGJlZm9yZSBuZXcgc2FtcGxlcyBhY2N1bXVsYXRlZCAtLSB3b3VsZCBzZWUKbm8gc2FtcGxl cyBhbmQgdHJpZ2dlciBjbGVhcmluZywgZXZlbiB0aG91Z2ggdGhlIHN0YW5kYnkgd2FzIHN0aWxs CmFjdGl2ZWx5IHJlcGxheWluZyBXQUwuCgpBZGQgdHdvIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBi ZWZvcmUgY2xlYXJpbmcgbGFnIHRpbWVzOiAoMSkgYWxsIHRocmVlCkxhZ1RyYWNrZXJSZWFkKCkg Y2FsbHMgbXVzdCByZXR1cm4gLTEsIGluZGljYXRpbmcgbm8gbmV3IGxhZyBzYW1wbGVzLAphbmQg KDIpIHdyaXRlL2ZsdXNoL2FwcGx5IHBvc2l0aW9ucyBtdXN0IGJlIHVuY2hhbmdlZCBmcm9tIHRo ZQpwcmV2aW91cyByZXBseS4gIFRvZ2V0aGVyIHdpdGggdGhlIGV4aXN0aW5nIGZ1bGx5LWFwcGxp ZWQgY2hlY2ssIHRoaXMKZW5zdXJlcyBsYWcgaXMgb25seSBjbGVhcmVkIHdoZW4gdGhlIHN0YW5k YnkgaXMgdHJ1bHkgaWRsZS4KCkF1dGhvcjogU2hpbnlhIEthdG8gPHNoaW55YTExLmthdG9AZ21h aWwuY29tPgpSZXZpZXdlZC1ieTogRnVqaWkgTWFzYW8gPG1hc2FvLmZ1amlpQGdtYWlsLmNvbT4K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU96RXVyVHpjVXJFenJIOTdERDcrWXo9 SEdQVTgxa3pXUW9uS1p2cUJ3WWh4Mkc5X0FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyB8IDM0ICsrKysrKysrKysrKysrKysrKysrKystLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDJjZGU4ZWJjNzI5Li41OWRjZmEzNDBh NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKQEAgLTI0NTYsMTEgKzI0NTYsMTYg QEAgUHJvY2Vzc1N0YW5kYnlSZXBseU1lc3NhZ2Uodm9pZCkKIAlUaW1lT2Zmc2V0CXdyaXRlTGFn LAogCQkJCWZsdXNoTGFnLAogCQkJCWFwcGx5TGFnOwotCWJvb2wJCWNsZWFyTGFnVGltZXM7CisJ Ym9vbAkJY2xlYXJMYWdUaW1lcywKKwkJCQlub0xhZ1NhbXBsZXMsCisJCQkJcG9zaXRpb25zVW5j aGFuZ2VkOwogCVRpbWVzdGFtcFR6IG5vdzsKIAlUaW1lc3RhbXBUeiByZXBseVRpbWU7CiAKIAlz dGF0aWMgYm9vbCBmdWxseUFwcGxpZWRMYXN0VGltZSA9IGZhbHNlOworCXN0YXRpYyBYTG9nUmVj UHRyIHByZXZXcml0ZVB0ciA9IEludmFsaWRYTG9nUmVjUHRyOworCXN0YXRpYyBYTG9nUmVjUHRy IHByZXZGbHVzaFB0ciA9IEludmFsaWRYTG9nUmVjUHRyOworCXN0YXRpYyBYTG9nUmVjUHRyIHBy ZXZBcHBseVB0ciA9IEludmFsaWRYTG9nUmVjUHRyOwogCiAJLyogdGhlIGNhbGxlciBhbHJlYWR5 IGNvbnN1bWVkIHRoZSBtc2d0eXBlIGJ5dGUgKi8KIAl3cml0ZVB0ciA9IHBxX2dldG1zZ2ludDY0 KCZyZXBseV9tZXNzYWdlKTsKQEAgLTI0OTIsMTYgKzI0OTcsMjUgQEAgUHJvY2Vzc1N0YW5kYnlS ZXBseU1lc3NhZ2Uodm9pZCkKIAlmbHVzaExhZyA9IExhZ1RyYWNrZXJSZWFkKFNZTkNfUkVQX1dB SVRfRkxVU0gsIGZsdXNoUHRyLCBub3cpOwogCWFwcGx5TGFnID0gTGFnVHJhY2tlclJlYWQoU1lO Q19SRVBfV0FJVF9BUFBMWSwgYXBwbHlQdHIsIG5vdyk7CiAKKwkvKiBQcmVjb21wdXRlIGlucHV0 cyBmb3IgY2xlYXJMYWdUaW1lcyBkZWNpc2lvbiBiZWxvdy4gKi8KKwlub0xhZ1NhbXBsZXMgPSAo d3JpdGVMYWcgPT0gLTEgJiYgZmx1c2hMYWcgPT0gLTEgJiYgYXBwbHlMYWcgPT0gLTEpOworCXBv c2l0aW9uc1VuY2hhbmdlZCA9ICh3cml0ZVB0ciA9PSBwcmV2V3JpdGVQdHIgJiYKKwkJCQkJCSAg Zmx1c2hQdHIgPT0gcHJldkZsdXNoUHRyICYmCisJCQkJCQkgIGFwcGx5UHRyID09IHByZXZBcHBs eVB0cik7CisKIAkvKgotCSAqIElmIHRoZSBzdGFuZGJ5IHJlcG9ydHMgdGhhdCBpdCBoYXMgZnVs bHkgcmVwbGF5ZWQgdGhlIFdBTCBpbiB0d28KLQkgKiBjb25zZWN1dGl2ZSByZXBseSBtZXNzYWdl cywgdGhlbiB0aGUgc2Vjb25kIHN1Y2ggbWVzc2FnZSBtdXN0IHJlc3VsdAotCSAqIGZyb20gd2Fs X3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCBleHBpcmluZyBvbiB0aGUgc3RhbmRieS4gIFRoaXMg aXMgYQotCSAqIGNvbnZlbmllbnQgdGltZSB0byBmb3JnZXQgdGhlIGxhZyB0aW1lcyBtZWFzdXJl ZCB3aGVuIGl0IGxhc3QKLQkgKiB3cm90ZS9mbHVzaGVkL2FwcGxpZWQgYSBXQUwgcmVjb3JkLCB0 byBhdm9pZCBkaXNwbGF5aW5nIHN0YWxlIGxhZyBkYXRhCi0JICogdW50aWwgbW9yZSBXQUwgdHJh ZmZpYyBhcnJpdmVzLgorCSAqIElmIHRoZSBzdGFuZGJ5IHJlcG9ydHMgdGhhdCBpdCBoYXMgZnVs bHkgcmVwbGF5ZWQgdGhlIFdBTCwgdGhlcmUgYXJlCisJICogbm8gbmV3IGxhZyBzYW1wbGVzLCBh bmQgcG9zaXRpb25zIHJlbWFpbiB1bmNoYW5nZWQgYWNyb3NzIHR3bworCSAqIGNvbnNlY3V0aXZl IHJlcGx5IG1lc3NhZ2VzLCBmb3JnZXQgdGhlIGxhZyB0aW1lcyBtZWFzdXJlZCB3aGVuIGl0IGxh c3QKKwkgKiB3cm90ZS9mbHVzaGVkL2FwcGxpZWQgYSBXQUwgcmVjb3JkLiAgVGhpcyBhdm9pZHMg ZGlzcGxheWluZyBzdGFsZSBsYWcKKwkgKiBkYXRhIHVudGlsIG1vcmUgV0FMIHRyYWZmaWMgYXJy aXZlcy4KKwkgKgorCSAqIFRoZSBwb3NpdGlvbi11bmNoYW5nZWQgY2hlY2sgcHJldmVudHMgc3B1 cmlvdXNseSBjbGVhcmluZyBsYWcgaW4KKwkgKiBidXJzdHkgcmVwbHkgcGF0dGVybnMsIHdoZXJl IG9uZSByZXBseSBjb25zdW1lcyBhbGwgbGFnIHRyYWNrZXIKKwkgKiBzYW1wbGVzIGFuZCB0aGUg bmV4dCBhcnJpdmVzIGJlZm9yZSBuZXcgc2FtcGxlcyBhY2N1bXVsYXRlLgogCSAqLwogCWNsZWFy TGFnVGltZXMgPSBmYWxzZTsKLQlpZiAoYXBwbHlQdHIgPT0gc2VudFB0cikKKwlpZiAoYXBwbHlQ dHIgPT0gc2VudFB0ciAmJiBub0xhZ1NhbXBsZXMgJiYgcG9zaXRpb25zVW5jaGFuZ2VkKQogCXsK IAkJaWYgKGZ1bGx5QXBwbGllZExhc3RUaW1lKQogCQkJY2xlYXJMYWdUaW1lcyA9IHRydWU7CkBA IC0yNTEwLDYgKzI1MjQsMTAgQEAgUHJvY2Vzc1N0YW5kYnlSZXBseU1lc3NhZ2Uodm9pZCkKIAll bHNlCiAJCWZ1bGx5QXBwbGllZExhc3RUaW1lID0gZmFsc2U7CiAKKwlwcmV2V3JpdGVQdHIgPSB3 cml0ZVB0cjsKKwlwcmV2Rmx1c2hQdHIgPSBmbHVzaFB0cjsKKwlwcmV2QXBwbHlQdHIgPSBhcHBs eVB0cjsKKwogCS8qIFNlbmQgYSByZXBseSBpZiB0aGUgc3RhbmRieSByZXF1ZXN0ZWQgb25lLiAq LwogCWlmIChyZXBseVJlcXVlc3RlZCkKIAkJV2FsU25kS2VlcGFsaXZlKGZhbHNlLCBJbnZhbGlk WExvZ1JlY1B0cik7Ci0tIAoyLjQ3LjMKCg== --000000000000ffcab3064c55c925--