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 1w5oSh-003ecT-2v for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:25:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5oSg-004EW1-0s for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Mar 2026 17:25:38 +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 1w5oSf-004EVt-3D for pgsql-hackers@lists.postgresql.org; Thu, 26 Mar 2026 17:25:38 +0000 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5oSd-00000001K9m-3i2b for pgsql-hackers@postgresql.org; Thu, 26 Mar 2026 17:25:38 +0000 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7d7d4ebccf7so972938a34.0 for ; Thu, 26 Mar 2026 10:25:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774545934; cv=none; d=google.com; s=arc-20240605; b=IJMq/+/MYNXl+nurrt8esjfKiDHrgV/e5Oxag0h3SNeuozElkuyRV1Tqo2tibap7Ns OmCSQTSvX1NO2NSSnAZm+KecQ3qQKxTu3XNqyGABhS/x/PFN01ocltaRguv/cPQmf8xT SrbMPUxPRzLn8+3R7nMUWr2vzVxo9y62ZxZv/L95FQ0cWbnb1jxfvfzOsex8wDaxVA+i vxez7eR30uw7szmC62WVENUwGXJ37MAgaw/NgBNOwbKfQck1FLguMYN1k5DIaPHAJWcD 0TUWOdIGyL+mp/wCgIhcS+ps0RUmT/sORJdkU4EzSzBeWR95YfpQS+3dkFxFQP5FixC6 f4Hg== 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=cAgBPT3lmeyBvbVT/tQHLVnQVrDQQ4t/a2S8/SjYHM4=; fh=soPX6O9hKzluBy+eZgvzBr7uYc+asLzxs+qx30QPtkY=; b=JsCsRpQQHdk8S/GHG2rHm7u81kR/gvU42XJS9h0iOD72AzKg8cvru3ViGA6o5rcChs wARN8qahHrRafFtR09p5VF3i6lVjvSzv6LCMDB6AlSmCEDok2oUXpyjKB5VZhZCvUCnp ZQ9zm420YhYTXphfSVVmOw3ncD6fErOrQkrGqiHEkxuyKK/XZJv5k/7GJkUhPvMk12/j 85PPZaCRn1256QVsMymbbxUKU2fVJORKVeLL8HW5gvcZyT3SHkmGatBBZm87rWA4iaAW wu2OVllCrGpooSAqzXt4UbfkjFY3VOk9YKjJqwDEWumFeexYvpnophdNw04Q+KLy22YJ Sx4Q==; 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=1774545934; x=1775150734; 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=cAgBPT3lmeyBvbVT/tQHLVnQVrDQQ4t/a2S8/SjYHM4=; b=CgegPaPQeKrhoMod/lb9DZjTJEv14CkCYwNkH3t0/Xv8Yn4tExktWToTljZ1i6aH5q S8e+siMTo5SfXjVKpE9GcQ8TZhNh0uE3y53CkbwSU7/IhEv/7ZjC471daxRwqAwY5b/9 m4t0s9nMHPCZQiPi4fxXJMZzBEqP9YzD7ZG54PcIsQe+RI5Q1LmT5xYvKcdOx81G1Gbi bjj41U9hmYnywF7y5N5J+a8hiaFgm8e5cM3zusezFAu8zzbKl2d5X0elsTg87cE71tUi 6ViVS7tP4tenX1VId3WJv61fHrfzs26OIu1d5JdiS6GE04ZItNVwOlvLOu9mPDBPwpkm AdrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774545934; x=1775150734; 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=cAgBPT3lmeyBvbVT/tQHLVnQVrDQQ4t/a2S8/SjYHM4=; b=dlmDq4tqbNqzBsi2JhXuozcXRQMZHRkg6wPvsVCzrKvDMfvAWFSCfJliCOVsVTWqfA 1nJ/Tdzl5u2Cic9QKxF/YYu70FVsYxkECtqkdo33dtpX7wyojxPmQuT07/b4yo7egiDh dfoWdpYu/w4r1uHovR7EC/4O3oaSddmcOcXWpvTNRl+y4z4ydQt0xZuSfPPujJ8j2t+P mXEf/f9l34UQCGv2kMyV/FGf1VYJFp4fh5s0Wbz3o1FFhc85iDgqFoDcY39vhD9jKxrC FabEWpKKKsNG0GvHUAKPA6Mi3kB830OkOgWArr4Ts29mEVysjvRlOCLHHlY3LVQ7JUsq 1Mbg== X-Forwarded-Encrypted: i=1; AJvYcCVyA4qY0p+V+6x2oeFwvp4nd0vxkdGWkoIITFcpQdC6BvuGlxrbZgtCgFILTKT2JkJrXb0+9T6UdzcVlGKo@postgresql.org X-Gm-Message-State: AOJu0YxQWSThDF/nL8ZNTFZm7S8oxMKWetaDSAc9yHRqWWbmyITWoVZd HDqOG65qAh+Um13G/YwP/zt355gBo5AX4Fgdr8qE3n8jvw8ndv1FHeBz1scDDWXpfET8eyMGO8r T80u7z2B/QpAQaTKPesElu8PPrrZhCM4= X-Gm-Gg: ATEYQzwC2DidncC3DEbax53Dqh/n0O/y4M6iGzh2XPfJ3bm9OaqbIGAIlHAlD13mrt2 zFdPU+XxtembFEYmRMldASUo4XdY1FuWcCpXfJ/lhzJzsQiGDiHm0WlhCfYNxiX+bkrQ45VF785 vmVcf++OhVYZEGlsKP9Ze8aemhAXghNK0LHwCjE1whygofPbWfjX4zaSzjmhP5A04fFJqb/ZDmW IDAsA0rvQ2tf9l4Tj5/kY3WtPZlsm2Fv6qvxSLaXwktmrVdwjr7v5DAnKJGllZA9OBjMhQuYZJZ ebk/IbDkq7U+Xnd55xTBZkVIJ5n8ZPBDq9jGXPYQSQ== X-Received: by 2002:a05:6820:f014:b0:67c:1fc7:daa7 with SMTP id 006d021491bc7-67dff3cbf3amr4425258eaf.4.1774545934224; Thu, 26 Mar 2026 10:25:34 -0700 (PDT) MIME-Version: 1.0 References: <20250422181006.dd6f9d1d81299f5b2ad55e1a@sraoss.co.jp> <20250624170533.3caeec7d6034cd5ddf4f00d2@sraoss.co.jp> <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> <20250808122125.e9eaff938f8c83556f337e50@sraoss.co.jp> <20250820141028.dc06e0d1d787ce1151f69ed6@sraoss.co.jp> <20250902163341.c174d0e83eedfc54d68b8e9c@sraoss.co.jp> <20251231194455.5975fda68ed8e941e4afb805@sraoss.co.jp> <20260324195727.43416b69c71b5f63eed3b4bc@sraoss.co.jp> <20260325130127.7bc85919861f494ce7c332a5@sraoss.co.jp> <20260327000931.d2303c198c7c9445e90aeab7@sraoss.co.jp> In-Reply-To: From: Dean Rasheed Date: Thu, 26 Mar 2026 17:25:23 +0000 X-Gm-Features: AQROBzChz7fHp6YP78oJmMixlLefHRZ63WIeoxfu04uBfUuVIJeqSWqwLZ-2m7A Message-ID: Subject: Re: Allow to collect statistics on virtual generated columns To: Yugo Nagata Cc: Andres Freund , pgsql-hackers@postgresql.org Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Thu, 26 Mar 2026 at 16:00, Dean Rasheed wrote: > > On Thu, 26 Mar 2026 at 15:09, Yugo Nagata wrote: > > > > I've attached an updated patch including the documentation and tests. Looking at get_relation_statistics(), I think that you need to call expand_generated_columns_in_expr() *before* ChangeVarNodes() so that Vars in the expanded expression end up with the correct varno. This obviously affects queries with more than one table in the FROM clause, e.g.: drop table if exists foo; create table foo (a int, b int generated always as (a*2) virtual); insert into foo select x from generate_series(1,10) x; insert into foo select 100 from generate_series(1,500); create statistics s on b from foo; analyse foo; explain select * from foo f1, foo f2 where f1.b = 200 and f2.b = 200; QUERY PLAN ------------------------------------------------------------------- Nested Loop (cost=0.00..47.56 rows=1500 width=16) -> Seq Scan on foo f1 (cost=0.00..10.65 rows=500 width=4) Filter: ((a * 2) = 200) -> Materialize (cost=0.00..10.66 rows=3 width=4) -> Seq Scan on foo f2 (cost=0.00..10.65 rows=3 width=4) Filter: ((a * 2) = 200) (6 rows) Regards, Dean