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 1wAXRX-0004Q2-2V for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 18:16:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAXQX-001E81-0U for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 18:14:58 +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 1wAXQW-001E7e-2d for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 18:14:57 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAXQV-000000002vF-3WM1 for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 18:14:57 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-67010289b73so2400a12.0 for ; Wed, 08 Apr 2026 11:14:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775672094; cv=none; d=google.com; s=arc-20240605; b=U+roLbomGUXJcDOGh2xZsfXX9sfwdhr7u2X6PaX9mopfyTapcXuVoYsptJ3Hy3rzJb wWukvdZl0TFc+PVwMvKODLJPiKJIk3jq2Mgnk9FM/Sg7eBnhTPxgv9/AJ5tp9Un3T18+ qwl5qsoTq7fhJk2oemqUAxLoEeKTDqEMUcRdENVmH6VCGWsdKZAMJ1YXxMXA+MZYdatY CG6/nJGY9ckHoueckO45I60k5EU/1loIbLz2IKqF5/FBGOaGOtV+p9JbzVlBA2oNu30J P14KE3RtsofFYi1ULauyQiwPuqSWQj2FR1EwiRkiO024BU4SFGrcJmvSX2HSjwgfoFZy B5gA== 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=cHtszNvrQPc044YhDHBWARcF7h5LR20mIPUjFK0md6g=; fh=rTE7mEdahwRIvbboLT16qcJT1MkpSsont9k0uKUuiRg=; b=L0DPRlB1IWkMd7Kt28D+9aJApKFQW/5aau3VK7qQRRhJSApE8GfTVKsIWJ8tdQPCWJ UIMUKFgwEQ2VMuEk74+Ug1L2R6Fmip6C4g/SJP6ADFC4mIum90Tdna3VAjCZZ5Hgty3b RqHNpOtwfC+xhmijXgJtSE21gkrAtYbzzlXMuN+WCTWqIiCFIU5CYTrNKjoKTXLS5f9Q 6VWVa35snyXOBaO0DlPfd6a9LP9MkmxHpM0czVc8K3+DCg/Dsz+ckQgQwSdRAEn4mnMd sr0XSFwiuWDmLebUvbzTmIP5sot0heia9OFUsDn5LytCj7Ev2DcRucmpz/fFUDhN4Hed 7cKQ==; 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=20251104; t=1775672094; x=1776276894; darn=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=cHtszNvrQPc044YhDHBWARcF7h5LR20mIPUjFK0md6g=; b=C0FG2XZyYjTJU71Y1ug1qqKxa1O1Vw7k0x/u3QCo6q18djUj5NyzgoovNachTXv6vj SblBPL2dxCllse9fUi8EEsxxu84sN9k6P7uGpSr950MZLTdq4I4EYcgaGZqf5FeFqdEF eLwPZicVLLDWUhOoOxWRyozovn2I/R2LGp8KzS5VXW7AJQHi3jlGln/E7nLArUWH2nIZ 6PFp6N4ZdkQt4onNOcnfa6Rgag24Luo658j3If+YGUYsFMHLsGZn/s5M3g5e6e5hXC9/ zmDx1Xa6Gia4s69phJXNQPdRWfePffxzIDsq8jNKhCOKvFcIH3rMBvTC6l+RvRuG9JTO uHoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775672094; x=1776276894; 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=cHtszNvrQPc044YhDHBWARcF7h5LR20mIPUjFK0md6g=; b=GJ70zotCi9KQ6AVdH0EDJgrbBMn9DrIU3GHUIJ9gioQmomkl6Ph4oJNGbEQLBo44Oq U8kksvxIBkamqwYRrEaRIfGgIqH3pHy/wi3PkjrmCbRDsPnyrpC8hfRn7s7+XBWxAl1J aLJWQDEicWm32ka7wVaI+0HmiED6D4KfMqUwthtsZ8HhBdimZT7GwQ5pHG99DGOUW8SO a3PSknP9EF415wUwqwcepJwQzLrwKVOQelWtJzG7yNcZiNw0s9YdUy5cmjImAlJOPjI3 wAz954ALkxT7TBPnIeas9aejXqVDWJSpCDahwU7QMtogsztBv6eQqE2xkmtKeEXsWIR6 Fjwg== X-Forwarded-Encrypted: i=1; AJvYcCVn38k6Gdcy9BjyjpYcB4DqMdji0kKOYEDANHHXuB0ImC6ebSyBT6hMKnMuslDQSynSePpx5TwMzW3SUe0q@postgresql.org X-Gm-Message-State: AOJu0YyOeBNnTiKdVDvhUnQXv1CpItQXXw4CR9bN6IQxYexLQzYtoMCQ nhrJYRWwgdG7DBOWhgtf4sWjDF9euQdCM3SsH9MAOCuSm+q2Po/e+kGq7DKCNA6WodBa8lUICoC Xr9SRx1UknF4pLvLjdEWACwgmFIBcQ/JVZyIX X-Gm-Gg: AeBDietkAoRGuN5F9tGOHIfLaJx0CA/pkUs6G2L8GhkeNjtuYnRtMey3GhB4ZZt1SB4 O5jcNai7ELKBOYGPVZH3JJo2KZ7E4+WmEKDF7AZ/H9NA1CB+UrgqkutKMRfcAEafk+hTbPb60Ez GmtfOSXxH/y4f3Zubx/MpU3GWdIS09i7qfDI2qmtrPdLqUaO4M13Yl/2I/jq7T08hD2hCsNrcWP OoQyiptNyXW+WOWE7HQsHWF572Tvtosn+DWSYLMIIwQ3WLJQws7SvgtafIwlf+pISl5jLV6ZR1Q kWWBAw== X-Received: by 2002:a17:907:1caa:b0:b8f:b32e:e196 with SMTP id a640c23a62f3a-b9c679518f6mr1239430566b.30.1775672094233; Wed, 08 Apr 2026 11:14:54 -0700 (PDT) MIME-Version: 1.0 References: <5684f479-858e-4c5d-b8f5-bcf05de1f909@gmail.com> In-Reply-To: <5684f479-858e-4c5d-b8f5-bcf05de1f909@gmail.com> From: Sami Imseih Date: Wed, 8 Apr 2026 13:14:42 -0500 X-Gm-Features: AQROBzCO9MDdR2LmbSqB1v9622_oDnnu1vgum1AXFyJ_df05Q2LqIlkB2TWQICE Message-ID: Subject: Re: Add pg_stat_autovacuum_priority To: Alexander Lakhin Cc: Nathan Bossart , Bharath Rupireddy , Robert Treat , satyanarlapuram@gmail.com, pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000006ad8da064ef6e06d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006ad8da064ef6e06d Content-Type: text/plain; charset="UTF-8" > 07.04.2026 00:58, Nathan Bossart wrote: > > Committed after some more editorialization. > > Please look at a new anomaly, I and SQLsmith have discovered: > SELECT (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1), > (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1); > ERROR: detected double pfree in PgStat Snapshot 0x5f6fa4d95d50 oops, nice catch! With the default stats_fetch_consistency setting of PGSTAT_FETCH_CONSISTENCY_CACHE, the stats returned by pgstat_fetch_entry() are allocated in the snapshot's memory context, so they get free'd when the snapshot is cleared by pgstat_clear_snapshot(). That means inside relation_needs_vacanalyze() we should only pfree(tabentry) when pgstat_fetch_consistency is PGSTAT_FETCH_CONSISTENCY_NONE, as in that mode the stats are palloc'd in the caller's memory context and must be freed explicitly. autovacuum.c forces pgstat_fetch_consistency to PGSTAT_FETCH_CONSISTENCY_NONE for the autovacuum launcher, so the pfree() was never an issue there. I don't think we should do the same for pg_stat_get_autovacuum_scores , as we should not override the users intentions for fetch consistency, and also it would complicate the view greatly as we must force a _NONE consistency and a PG_TRY/PG_CATCH to restore the original mode. Attached is the fix: postgres=# set stats_fetch_consistency = NONE; SET postgres=# SELECT (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1), (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1); score | score ---------+--------- 8.5e-08 | 8.5e-08 (1 row) postgres=# set stats_fetch_consistency = snapshot; SET postgres=# SELECT (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1), (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1); score | score ---------+--------- 8.5e-08 | 8.5e-08 (1 row) postgres=# set stats_fetch_consistency = cache; SET postgres=# SELECT (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1), (SELECT score FROM pg_stat_get_autovacuum_scores() LIMIT 1); score | score ---------+--------- 8.5e-08 | 8.5e-08 (1 row) --0000000000006ad8da064ef6e06d Content-Type: application/octet-stream; name="v1-0001-Fix-double-free-in-relation_needs_vacanalyze.patch" Content-Disposition: attachment; filename="v1-0001-Fix-double-free-in-relation_needs_vacanalyze.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqdammc0 RnJvbSBhYmMxOTE1OGRhMDI2ODljM2MxMjA4MjUxOWJmODVmMTFhYjk2ZmViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCA4IEFwciAyMDI2IDE4OjA2OjQ2ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2MSAxLzFd IEZpeCBkb3VibGUgZnJlZSBpbiByZWxhdGlvbl9uZWVkc192YWNhbmFseXplCgpXaGVuIHJlbGF0 aW9uX25lZWRzX3ZhY2FuYWx5emUgaXMgZXhlY3V0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aApzdGF0 X2ZldGNoX2NvbnNpc3RlbmN5IG90aGVyIHRoYW4gTk9ORSwgYSBkb3VibGUgZnJlZSBvY2N1cnMK Zm9yIHRoZSB0YWJsZSBzdGF0cy4gRmlyc3QgaW4gcmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6ZSwg dGhlbgp3aGVuIHRoZSBzbmFwc2hvdCdzIG1lbW9yeSBjb250ZXh0IGlzIGZyZWVkLiBJbiB0aGUg Tk9ORSBjYXNlLAp0aGUgc25hcHNob3QgaXMgc3RvcmVkIGluIHRoZSBjYWxsZXIncyBtZW1vcnkg Y29udGV4dCwgc28gaXQncwp0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUg bWVtb3J5LgoKRml4IHRoaXMgYnkgb25seSBjYWxsaW5nIHBmcmVlIGluc2lkZSByZWxhdGlvbl9u ZWVkc192YWNhbmFseXplCndoZW4gc3RhdF9mZXRjaF9jb25zaXN0ZW5jeSBpcyBOT05FLgotLS0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIHwgOCArKysrKysrLQogMSBmaWxl IGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKaW5kZXggYmQ2MjZhMTYzNjMuLmIxZDEyZTNhNjFjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMzMyNyw3ICszMzI3LDEzIEBAIHJlbGF0aW9uX25l ZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLAogCQkJIGFubHR1cGxlcywgYW5sdGhyZXNoLCBzY29y ZXMtPmFubCwKIAkJCSBzY29yZXMtPnhpZCwgc2NvcmVzLT5teGlkKTsKIAotCXBmcmVlKHRhYmVu dHJ5KTsKKwkvKgorCSAqIEluIFBHU1RBVF9GRVRDSF9DT05TSVNURU5DWV9OT05FIG1vZGUsIHN0 YXRzIGFyZSBwYWxsb2MnZCBpbiB0aGUKKwkgKiBjYWxsZXIncyBtZW1vcnkgY29udGV4dCBhbmQg bXVzdCBiZSBmcmVlZCBleHBsaWNpdGx5LiAgSW4gb3RoZXIgbW9kZXMsCisJICogdGhleSBhcmUg bWFuYWdlZCBieSB0aGUgc25hcHNob3QncyBtZW1vcnkgY29udGV4dC4KKwkgKi8KKwlpZiAocGdz dGF0X2ZldGNoX2NvbnNpc3RlbmN5ID09IFBHU1RBVF9GRVRDSF9DT05TSVNURU5DWV9OT05FKQor CQlwZnJlZSh0YWJlbnRyeSk7CiB9CiAKIC8qCi0tIAoyLjUwLjEKCg== --0000000000006ad8da064ef6e06d--