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.94.2) (envelope-from ) id 1utLWZ-005KVM-Fm for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 07:33:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1utLWY-002W98-LF for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 07:33:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1utLWX-002W90-Th for pgsql-hackers@lists.postgresql.org; Tue, 02 Sep 2025 07:33:50 +0000 Received: from mail-japaneastazlp170110002.outbound.protection.outlook.com ([2a01:111:f403:c405::2] helo=TYVP286CU001.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1utLWV-0007ZX-1u for pgsql-hackers@postgresql.org; Tue, 02 Sep 2025 07:33:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=igkHEulQDekA6A/XwTvTrdUYVif/n1ykhtj+Q3I1Y7Hscxk+Ij2NhCszMzykHe0lAzoEONuCvyezcgTkRDd151WwvHih2BpCW/RHmyhjaG599yqqpsElvDeQH2kza7DLwzOVdevXTHn3v5FPuFi9fCJJJsxCUDoSuu/un/G6NyI6la9VwucWipvoxI23T5dcLFcXIX3zfiuHJ+/IX1P1gZM8xkUsrkzjISjtMNUiDYKZRpVPUhlLpiF1A21C5Ki8OyZk+g/dFwuSZRrR1B0fqzVy9tj7jwzWCApgR0OTQuw6s7zB5jMdiLoSxbhxCWgasjh2XHnHXDQOCoVz9RvKVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lSoop6lU8b9KreltMfOaB/kDFbrGfFrpV9JnjzD+vCE=; b=JJ2taaN8qcMPzJJVTiPdiN7WtHauLlblF0mXe4XcYndurX8vLlb2lh/5UV3YUAKTSv6zghGqGxPKHmivoGn57yZWm/TpnKbwJH8HwVI+ns23lNQ89iTxXOdVqoHGOJA5R15RqLvNT7yyyGmQMesGKJSQDNH8F5B4JyfspbX2uKjZCVqGM/sEDfXGPe7/T3MwIXUXAOg5jCNaJJq7iD65QISCgMP07plCc8Q+Q8/Arclvs09ybxz5LL3lFhKG5DGHntfzl6f4QxOhAeOHom75I6nDQ1kfxumKSP3gDrQaR8Y4aPzi8ANwEXXrTddU0GiNnziFC7ecGJqcZpYkEbv4rA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sraoss.co.jp; dmarc=pass action=none header.from=sraoss.co.jp; dkim=pass header.d=sraoss.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sraoss.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lSoop6lU8b9KreltMfOaB/kDFbrGfFrpV9JnjzD+vCE=; b=heNuw5lx1m8RSR5+eoS29mAOv0qtv7hjavQm/7zyCGA3efRhRbIcK8KYHAQdR88QJpC8gmK6ll7CEcB/mrmoEuLshsombyE/9LWoFpKf9Ru68s9WIMiP08oAdQd8lTm5wVO/PV0LpBLuEKdseBtUGkID6WOvVVI4HtOiyIH/IH5UE1Uf0/yd5joLhfKXynwEzqlI15cisRsUqKGTS7CokPNJ0+VowOuUtvUuUzVkmbIh3GWUmFjVnAZk4MDYtu63l6LfJTbTb2KO50KjoDkkTmaaSernXJxt51Rjixj/I7YuLllriZCLG8tiJ/DY6pLcVOBRV9nX0cgM6gwh8WIDXA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sraoss.co.jp; Received: from OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:1d3::5) by TY4P286MB6228.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:335::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.26; Tue, 2 Sep 2025 07:33:42 +0000 Received: from OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM ([fe80::6a34:c7a3:a249:cc9a]) by OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM ([fe80::6a34:c7a3:a249:cc9a%6]) with mapi id 15.20.9073.026; Tue, 2 Sep 2025 07:33:42 +0000 Date: Tue, 2 Sep 2025 16:33:41 +0900 From: Yugo Nagata To: Yugo Nagata Cc: Andres Freund , Subject: Re: Allow to collect statistics on virtual generated columns Message-Id: <20250902163341.c174d0e83eedfc54d68b8e9c@sraoss.co.jp> In-Reply-To: <20250820141028.dc06e0d1d787ce1151f69ed6@sraoss.co.jp> 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> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Content-Type: multipart/mixed; boundary="Multipart=_Tue__2_Sep_2025_16_33_41_+0900_LULRV8Lnk+KDzwmW" X-ClientProxiedBy: TYCP286CA0014.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:26c::8) To OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:1d3::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSZSPRMB0015:EE_|TY4P286MB6228:EE_ X-MS-Office365-Filtering-Correlation-Id: 2fd99443-da49-44ff-4d5b-08dde9f30a93 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|4053099003|4013099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7R0bXxSwp0o45eSmSLWBRIBs+t8m1ke8dKIvacc7az0OL2PlL/BmI+R4wo5L?= =?us-ascii?Q?0bWZkn77JmCjVYztNzpRUv//lx8h5rGPWKF0lm0noE64POqkA/DGrH/5GSMJ?= =?us-ascii?Q?p2hB9H4uZoOA7Q1mOfgd/wYdRb7raJLX18ssvngdLF0Vlbsozuuyb/A/JTcf?= =?us-ascii?Q?FVOv6qIB/bMhe0uLO0QpTJW4pOkZo4qZYzaNc4H0GVpj540Nhuxyd098f010?= =?us-ascii?Q?d0TvsuNOuUOhqVAEmD06JKzcCg1E2MA/RxRdVzrIYk2LV3CNsTq/P7zlK5TK?= =?us-ascii?Q?XT+Ok4TPhAJN1QwgAkrJ9W3DonSZWAVH80mU8KHqVZk5w3zjgsssx8jCEpPj?= =?us-ascii?Q?EUnmA5f6G/6f0OiAl1YP6HY8ypMkwBGy/fF/Qdn/PJZ5mQLE2U6waG12Wqw9?= =?us-ascii?Q?iwATRzLWhyadEdqRbW7D6cIQvqTwO3rOCgp0XAmFV8Uv0nrC5mXmIPGSIKDC?= =?us-ascii?Q?PW59LnDVOguFad6m+CWt20AjOihbFkbc+kkTlUFvpPnsEibpe9lTN5Ly7rkA?= =?us-ascii?Q?eJHlOliJZrBaqVmQO0eW+S+q+e7wZxfoPsGaR0r5iyx4v5uMT4h+nDHDPNyw?= =?us-ascii?Q?bvup8RivZzwWaccn8u497/rS9J9mSybldo8n5d/d646FbH+l8pkULqiWaoRE?= =?us-ascii?Q?Y+6Hlt0hNNXfC4WBg7DA5kYGfHlVtcchhw5I2/gsplf1mGjXv3cC0WI8JQJW?= =?us-ascii?Q?akAyZ939liBrxpCAoHJpQQ4Mg9yqMhibLlY+/pRD8t518XQdw4YPb8RTJmBU?= =?us-ascii?Q?pExpGo/Q22upybUGE9J2/hgzpuoeW8OQk9SfqgD3wvkFwDYLdFXcCCOFvoct?= =?us-ascii?Q?0fDesmijiauG+u4Mlxra79sfk/t1gmi+Gzu/RckujNUpV+lQcew2qkBfHUQr?= =?us-ascii?Q?YDOdW4CHJCuCZO5h0YTOhT3AhBt0JLRbiKn/9Lnxjc46l6mdvxm8rQWFc4Fs?= =?us-ascii?Q?CVHX05RH6HHh7slYhMouMvWHHyoK6ANHkjCy+SilKghXAaVpl6AuetrtzfIS?= =?us-ascii?Q?29lOIltFjGB2NP/6qlzrRECvxh1cDg7gSNpOse6S6F7Erq8sZbFj4OzjohlV?= =?us-ascii?Q?g9odMCVaACwmEIjz9GExPtaVVI2mPGUHucoS5vMe2D7ItGcs6kbShT0lSbUL?= =?us-ascii?Q?RHZ2aEo13DEtLpkyIJlszRPH+daYFSeZHvkVMkMGRiFXlVCQ1nZDBk5wG/i8?= =?us-ascii?Q?TZZv80A795glsgEUe4+cx83hWzniJP63Q2WuHxqiK+ESbBF7wA8CQ6Wdhn0r?= =?us-ascii?Q?iFVHuSl5EQhGR5++hS0wFkMQjjm7vX8Qkse9ByHrxL3mGAjfgALEhLvFjBEs?= =?us-ascii?Q?V0klnTDynYl9bD5NFfKFZo+kINZ+WCSVVUtueRogXtxO2qTzoSf/n7J15tQ9?= =?us-ascii?Q?NBt9OSi2FKnw1SXqBoEtb329cUtRec0Dsaia9JslC+dy9ydA3EQb3Zx0rR1A?= =?us-ascii?Q?rI/iApcpsyU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(4053099003)(4013099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?O9SZYRsg5Hpiadm8AQ45l1tYEgPPXlKdAs9cbw3FhHPriidFAeI4I9fedLmk?= =?us-ascii?Q?G5CPiGmb64BzwQW6UCaVoxqLSLndLXWGDU0PJqylwfRmXTs84L4Q7Cx8XnEb?= =?us-ascii?Q?MHIvjDNcqj/f+IQCjRfjICL4YW2Hlv1LYCvYOQN0MAbsJSvEobBsmFZm5HHJ?= =?us-ascii?Q?H9k6w1UK3w59GT85QziUcU3/Rk7AbWqvppPRlnM5M87t6J8GZYE/wkS8WLhD?= =?us-ascii?Q?SyhQNpWTpU55WL3OMHLvgDm8N8aRUkKbV2EcLn/laFIG5Zjall4rES/gbUB3?= =?us-ascii?Q?HAupEMQ2Wa4+Y+q0vhkLDk40kjw2MuECYS9sdG2FciSNiMElM5JTitEIDd7C?= =?us-ascii?Q?mWxq9TY8tUibfcaTefINW2h/UpE1tXy5PxNEC+/473o0fVVOkipLpQ9R6Jtb?= =?us-ascii?Q?pACArN6pZtRziu+Ap6DCowqf3oDIdwCM6oHCdqdz6DuUCJ6CFSwyuLd9RGux?= =?us-ascii?Q?PPageXt54r4US2oy4UIMkfGVa28aBHkP9zQnrMWGVsEW6c4I+kXN2chW8f1E?= =?us-ascii?Q?VApkkNeh7Z7sR3asW2T5YxoAAfpJ/5it28pEhZ0Jx6XVQN9zbOcv+sC03oYB?= =?us-ascii?Q?Cb6FeVsqWKROnf1UuEcf3W6TEWe25RFiVC3x/ruPKN+C5DawyqIDTjK06YhO?= =?us-ascii?Q?xR5kHFPhmZm7BVAXdFNvENKZ3NxFuLxUUMQ0kpXTFGqnt0u0k0C4j6PHg1cF?= =?us-ascii?Q?+qnZASYmxH/C7JZaYYOEhO1cofqIt58ydVqwIsS6WRDXmjDpLd3n7BP6Q/En?= =?us-ascii?Q?Nw3oQF1RGF11OUqHzutsy9cWW1sFv+rNgIbnyxznhMGlu0nZsqrPZD4QenAw?= =?us-ascii?Q?M+fkST2azNB89yBUx1FHDpmDhjK6vpKZ63OBDviOdKbObJWe0aWI6cOdas4q?= =?us-ascii?Q?51I5wVXzpudqfdHsyxalnwxJubvo14ZfVW9yU3fnM7mRbsfuPnFgMUEE7QQ8?= =?us-ascii?Q?a//5DfhRO/UVk5OlPgHagiqA9LeTle02EWEg96+oNXMkIOpio8S4Gc16gE97?= =?us-ascii?Q?WE3pFeTeNFVSPk7A/ervyeTf4TbP44JSfosu23J4KlaHPfO9P/ec/782/Bi6?= =?us-ascii?Q?t0Z4Lz9SQSr77yuB6t6wwIuxx0NuCg9yZ8RnH+KTVmmJYVXOd1HUeiIJ///P?= =?us-ascii?Q?M3+1hdeOfc+4ecKClnGpBT1IVMl+fEKG0l2lG0d/S6nZJUVde7CjDJE58oJC?= =?us-ascii?Q?1U0ar/yrM9PA0w/xm9bTbpWGBjkgXdo7zOgA3Xva84PEk3VW2F9nBNM96LAr?= =?us-ascii?Q?ZaQIesHPDRsElIRzGUjk+0U6ILZKFVaONnGUIQ6dbuI+RQsqvnN3NO3m5fO5?= =?us-ascii?Q?ivhGEn/VDx49/8dJPFUsnCTY0iy+o3Z//qldFpITgbDdF8qpFVsr9XJ/8T8P?= =?us-ascii?Q?7/MI8tDmC4F8nRIXBnHkJFUrr1t2snIZdDEZo0mY9pT5OWSb/7wgnaHl5jBx?= =?us-ascii?Q?rMQJsos8bDCPNEst3cpXvyi8KT/99n2W7cjO7ek17ccSqQyU0ATShQDANHY6?= =?us-ascii?Q?38+MHunGEbQb/980htUBK21Gf5il+CKxhMUEi3v9GRYtkm5lgthK6ExtDlTw?= =?us-ascii?Q?TGziQjpQ3G1XiOEvC9G5ZDCtJmIy67Ym55SJLM0h?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2fd99443-da49-44ff-4d5b-08dde9f30a93 X-MS-Exchange-CrossTenant-AuthSource: OSZSPRMB0015.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2025 07:33:42.2330 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 75db6c32-352e-4063-ae79-cafb8623f6db X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8ccZ1Sae7MIN5mx3O4Ym7m1Ur/5l6uuYFUy/ol89uhhyo+XbrOaNyLqOBDQVRYlorktyN7o2Mgdazrq1HAZ7rA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY4P286MB6228 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Tue__2_Sep_2025_16_33_41_+0900_LULRV8Lnk+KDzwmW Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Wed, 20 Aug 2025 14:10:28 +0900 Yugo Nagata wrote: > On Fri, 8 Aug 2025 12:21:25 +0900 > Yugo Nagata wrote: > > > On Fri, 1 Aug 2025 00:28:30 +0900 > > Yugo Nagata wrote: > > > > > Hi, > > > > > > On Tue, 24 Jun 2025 17:05:33 +0900 > > > Yugo Nagata wrote: > > > > > > > Instead, I'm thinking of an alternative approach: expanding the expression > > > > at the time statistics are collected. > > > > > > I've attached a new patch in this approache. > > > > > > This allows to collect statistics on virtual generated columns. > > > > > > During ANALYZE, generation expressions are expanded, and statistics are computed > > > using compute_expr_stats(). To support this, both compute_expr_stats() and AnlExprData > > > are now exported from extended_stats.c. However, since they are no longer specific > > > to extended statistics, it might be better to move them to analyze.c and vacuum.h. > > > > > > To enable the optimizer to make use of these statistics, a new field named > > > virtual_gencols is added to RelOptInfo. This field holds the expressions of > > > virtual generated columns in the table. In examine_variable(), if an expression > > > in a WHERE clause matches a virtual generated column, the corresponding statistics > > > are used for that expression. > > > > > > Example: > > > > > > - Before applying the patch, the cardinality estimate is erroneous. > > > > > > test=# create table t (i int, j int generated always as (i*10) virtual); > > > CREATE TABLE > > > test=# insert into t select generate_series(1,1000); > > > INSERT 0 1000 > > > test=# insert into t select 1 from generate_series(1,1000); > > > INSERT 0 1000 > > > test=# analyze t; > > > ANALYZE > > > test=# explain analyze select * from t where j = 10; > > > QUERY PLAN > > > ------------------------------------------------------------------------------------------------- > > > Seq Scan on t (cost=0.00..0.02 rows=1 width=8) (actual time=0.031..0.806 rows=1001.00 loops=1) > > > Filter: ((i * 10) = 10) > > > Rows Removed by Filter: 999 > > > Buffers: shared hit=9 > > > Planning: > > > Buffers: shared hit=10 > > > Planning Time: 0.299 ms > > > Execution Time: 0.948 ms > > > (8 rows) > > > > > > > > > - After applying the patch, the cardinality estimate is correct. > > > > > > test=# analyze t; > > > ANALYZE > > > test=# explain analyze select * from t where j = 10; > > > QUERY PLAN > > > ----------------------------------------------------------------------------------------------------- > > > Seq Scan on t (cost=0.00..41.50 rows=1001 width=8) (actual time=0.034..0.871 rows=1001.00 loops=1) > > > Filter: ((i * 10) = 10) > > > Rows Removed by Filter: 999 > > > Buffers: shared hit=9 > > > Planning: > > > Buffers: shared hit=6 > > > Planning Time: 0.374 ms > > > Execution Time: 1.028 ms > > > (8 rows) > > > > > > > > > Note that the patch is still a work in progress, so documentation and tests are not included. > > > > I've attached an updated patch. > > > > I modified the documentation to remove the statement that virtual generated columns > > do not have statistics. > > > > In addition, I added a test to ensure that statistics on virtual generated columns > > are available. I've attached a rebased patch. Regards, Yugo Nagata -- Yugo Nagata --Multipart=_Tue__2_Sep_2025_16_33_41_+0900_LULRV8Lnk+KDzwmW Content-Type: text/x-diff; name="v4-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Disposition: attachment; filename="v4-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Transfer-Encoding: 7bit