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 1uob5q-006WRV-Pl for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Aug 2025 05:10:40 +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 1uob5q-0046Rf-1Z for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Aug 2025 05:10:38 +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 1uob5p-0046RX-FW for pgsql-hackers@lists.postgresql.org; Wed, 20 Aug 2025 05:10:38 +0000 Received: from mail-japaneastazon11020117.outbound.protection.outlook.com ([52.101.229.117] helo=TY3P286CU002.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 1uob5m-000mfZ-1k for pgsql-hackers@postgresql.org; Wed, 20 Aug 2025 05:10:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bHe0pGQ3XuajFqzuQcHf5+PGISFdGnvpmJz6nhoRGyrFz4tCpUB4Lop9ISMzQ7iohOnjmIhCGyWrRcEcg9c4yx0Xf3+0+hFku1htAYdOYozIYWJFyq4ARwaOtskJPNgHzYazO/x+Gh4jzOminUNvgI1DYSwlz+/sJguZDYJ+v+PjncrKRWxe3fwDQWN/CCR8ReVHnNpFGa/CV2QMgdeGm5J/0u+vUMiwz1Xi/K1Dx1fA58k+oYQu2JxVjX1dE3yH55FWsIOwKik5CWf4F+nhQ3Qkfg98dB2cO0FtsvMEfSoXfw2c7s679818wqd/1KUDj5JCCpF4wizqcbhPS+bSdQ== 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=SMTXo9Di0iSD0mZ8Qj32HiQqovQJfn1m8xRRpgD5Ers=; b=fS0oyRyOACrzyjw1QXGf80CTgcdp7kXgxmtqdleLSItmVM6efEqRfXp/amdj1hlvDqT0WpjbEKVzei2cbysWYyHXcRfmYUmsARFVePinfGUiIw6e6JMRboGvssrI6YdQGa8WsTJ72xFNJD5O8N7eUxHSkZRZfsRjWTf9y7Yu6q9JmFpfKvukMPIT5Ok71BK65S4frE7Hf/QS76buaHSJPZwZLEhk+P5QlwRKwUWUOdMQS+yqFXN+4seiXrZR5GQA4qVrIrzK8Ye2+PakaPVqzcriPlwuSptqpcZqBDCA4CD6qPEtjhUgDeHc+x2YMpcOZ/gZj+M01huSZ9PCZS9H0w== 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=SMTXo9Di0iSD0mZ8Qj32HiQqovQJfn1m8xRRpgD5Ers=; b=GAf09DzR1V3jsy1i5y9AsjGXdJIKD8nJuGEVX7e17nAjDsoRYSfc6rbY07IYV8HREILud5BVJQiRKa/ax4w2+pfhBV/q5/ZD28ERnCjpifi6WkR3vtl7XMgz8cg2WHEFqG7E/JB1/bv0HhOw2KW4cjoHa+5h5oq2Eqc6N7YP4yU3DL2+zxq5lUJrLbDyTrkqMqYyWE+aa+vWFeyFD9asOGE2PkZrvWPnaZAw8NbnyGjeq4JPEw/+cUjVyUYhfxickCVI6087ksyRrPf60ls0cREQjVIg3slbAGug95jfMCB0XJT0XE5ck4UO1IbpW1CEFN6BqCWeNxZ/WUDSXrXF7w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sraoss.co.jp; Received: from TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:158::8) by TYXP286MB6089.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:279::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.14; Wed, 20 Aug 2025 05:10:29 +0000 Received: from TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM ([fe80::5361:b77e:6e96:d39a]) by TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM ([fe80::5361:b77e:6e96:d39a%7]) with mapi id 15.20.9031.023; Wed, 20 Aug 2025 05:10:29 +0000 Date: Wed, 20 Aug 2025 14:10:28 +0900 From: Yugo Nagata To: Yugo Nagata Cc: Andres Freund , Subject: Re: Allow to collect statistics on virtual generated columns Message-Id: <20250820141028.dc06e0d1d787ce1151f69ed6@sraoss.co.jp> In-Reply-To: <20250808122125.e9eaff938f8c83556f337e50@sraoss.co.jp> References: <20250422181006.dd6f9d1d81299f5b2ad55e1a@sraoss.co.jp> <20250624170533.3caeec7d6034cd5ddf4f00d2@sraoss.co.jp> <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> <20250808122125.e9eaff938f8c83556f337e50@sraoss.co.jp> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Content-Type: multipart/mixed; boundary="Multipart=_Wed__20_Aug_2025_14_10_28_+0900_u9fdIbTgN.58HH3l" X-ClientProxiedBy: TYWP286CA0029.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::17) To TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:158::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYCP286MB2162:EE_|TYXP286MB6089:EE_ X-MS-Office365-Filtering-Correlation-Id: 4ab588b9-44bb-4e7f-abd9-08dddfa7e15d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|4013099003|4053099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?YZxSLmBTOAG7lg98ZnYLsviqI9vYwmzR3f6o2F0I4I27n4HdrQZk+dWWAfZz?= =?us-ascii?Q?MS9S4ZOWfqzVsl2f4F2Hsoufw52zpopPR+lkA6ocwcdhIj+yOqVTtRZsQB8y?= =?us-ascii?Q?T0niRwa17IeRK56jFnwpZUBL+Vptu2c4HZDnNmw8xvMSbAsFeSp6/a1SC2VM?= =?us-ascii?Q?EdrKdj18YdxUHH3Pf4gGTXHkpxN9Wkgkl/LR6R2EwgQVgVF5EGxkGmOnJm1n?= =?us-ascii?Q?u+uJgs0mrcISawkZRLV0BPQrCtEmEgavM11c0emqv7g6upfOEQ3kRHKc2REG?= =?us-ascii?Q?SQOeZQD2Kd5LLvgQZSMsMmJzzczTgiJMyXjaD/++2thtIKRyynMUNPq/lypx?= =?us-ascii?Q?KsDzH842HS/FDsHfsfAnoNj70NYZYAgySP+gICIrw1p/x2esHDyzZcvFKJrb?= =?us-ascii?Q?lsMLsY2FqgOeGz2AVykAOPsBFf09MPypWH8sXjlij6PQpGq88DzeXNlfl16M?= =?us-ascii?Q?IFlSCmBZgKRWms0Er23JE7wCz6A+YpboOi7eX7qXoxA1lbS74MOLo+OlVxVq?= =?us-ascii?Q?sJEEiMbPXNTF9BVQRHSFxluh1ASwDzmBgVPM2sIJooGV8rIEo6Xoemmm2o2K?= =?us-ascii?Q?L++YdOd+ziUmiNAwPvn2m/I7EyYNQ/fgeyEixp2gHmrSgvvJ42x3KscZOP1n?= =?us-ascii?Q?mJNPbx6e92cs5/1KlrYoO6Bzkq7zgJiGxiWittOhix9NsGj4Ec0e3GYGKPPp?= =?us-ascii?Q?t77FHgQr0CgUQWoJFr+rjdNgCoSsOB1iBrMEqU5FRxLlPs5cCKaHJi0gn8Hd?= =?us-ascii?Q?nFPp+69EuigNsQWOkoMNBhxfVzlwsm4ifIv5X4AZzyeaFwoSgnHsoXw4qvB3?= =?us-ascii?Q?fVcgqjdDO8V6lF735BnpQcUlUfd3qTiJ1dPWwFII8A+HtMf9gqSOR5ElSu0j?= =?us-ascii?Q?0LBPtEYjCdToqKkSw/CRRwQw8v+AxLlECDMh38I5x2qy8iqjSYB2L1hilB0v?= =?us-ascii?Q?o4ldyPtz1dgygSWO1QyXouY9Ljaa15dD/ZFHW37GhLEvoj6cKYzMbBJlODpF?= =?us-ascii?Q?ad70s71njtwOFVh7pS5aNfTzRYwgyoC9UcwMy87ZedA6jKH0qqDr4otI2+nL?= =?us-ascii?Q?TPf19WIF3qZwXWBFxVEbj9ArWv3TDQi7FoiQ9iE6FDuBDJ1Nz1vaFko3Snmj?= =?us-ascii?Q?6OCk3zLSpmqgHYh7Z0/B0vKIhCfVO8UQY1KQi/N6891RyLZHgPaRPLwodcWZ?= =?us-ascii?Q?gokU9efFUoNGesMiELrNHzAYUGXTXiJrcg5ebIi84Cnp8cYtN+YaB/DcUDtJ?= =?us-ascii?Q?LHh+C0FlYm/7sUasnfu+9vefgiSHYAV7gJ1PMEfjJv9axFlJv3IRvYpke44/?= =?us-ascii?Q?85t4EzVDQWgW5KBWNgE/wSWaLFe0o9grCNjR2FwGzCFy7GlPxYHhOPyIbqlk?= =?us-ascii?Q?7V1Ge+6FSGJZOoV2TJ0+zyl2YGP8yO0xB33BwollTX4toTCzbhX3/ZcHcVhv?= =?us-ascii?Q?BNFkZzp+Ac8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(4013099003)(4053099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5Bxt8LKiQXv2pGkpnZNx9wHLJIFM9NRmoaXLxrYreSM+25UPrBKXPgVdeZzD?= =?us-ascii?Q?FB4dmNCF9/P6iN1+BnEZdL+85ihtUjKfLPc+7WWLDMF6mLrmHd2hq48ApPcl?= =?us-ascii?Q?cDYDXBwy166gPJ/gI/dvCiHkf4BnYOSiPcPX4kCpJn0gc8m8u7lu0jIInZE+?= =?us-ascii?Q?5ntZfinE5A/Yo3EDdAbpmNAIRdu3mDk0zSfdOuiEFAE+Y9smhtcXacjAr3IV?= =?us-ascii?Q?3XWagz1dXUwlVwwnoAMZ2G/RHHg/kAK+CdNTZ1HGUsE6geGo0LqlRrZyrOQP?= =?us-ascii?Q?vl5Nm3SXVdyd12enk+ZDrgE7CvBkAlq5cBP2DcV1OZHdIDoOf/Cwug5+TsL8?= =?us-ascii?Q?Sj3U6HGQGavWkNflqA6SbWQU57lj6VvXkbs4Y39D1/YF6l2dnaStsUiaLcdQ?= =?us-ascii?Q?VS2XP/G/2rL6fnJ5H7rWxoLCVQBPfxNTMZO2zJHZoTP4XmYpYE36ilp070XE?= =?us-ascii?Q?t2JLyUoybDhVpMy+gcKoR2l4fO/aLWDyymafEaLhE+coLxKpT25fQ2M382yX?= =?us-ascii?Q?XeSQZe3ziYMGIwi1si8CVLs8YJ3vTwQhlIQyT2zUF14opfigmnNpjzJu0m6P?= =?us-ascii?Q?RNhZzAdaAnz5HkOmwReYwPSikbbbXPujG3+4cB6zjYqYW9J85G2EnJZntFJZ?= =?us-ascii?Q?QkHUMpDFzjl7owmUsOYf3g67zQLYIctlQe7wp6rGMnALjAdqQjAAtO/0m2TO?= =?us-ascii?Q?M7sECFIsZzjI3t2TDF8Xdc9u4KmDJcr6v/h6qgp+i+K2zsm9jmxnwMY6iFM6?= =?us-ascii?Q?42wI8vBtn3zkVIeE/g144jY9vvyy4bW0e2eCzBAMNtCoBgSvRWKvU6hwXY8X?= =?us-ascii?Q?rV10EBgsRHfO5i6UdCyeiZcSnoeKYjJV9PuwjY0IxL81vhQ/1c6g7K3MA51Q?= =?us-ascii?Q?VO+HWFxt/x18amrQO5MYZ3wiosZiP1kkJRlm5YtCsfZljY0tYVlveDTDGNXL?= =?us-ascii?Q?L3PJcL9YSzxcdBuhjtzKUKdnouphiCc9DleON/WxLG/4eu1+lpepLJIP1gL0?= =?us-ascii?Q?bLJuNL5BIdh0GrJA1/tVzcTQqev61Q/BsOZsJzbhI/P0pEiKaV19PXTYQpW8?= =?us-ascii?Q?85lDdS9S7/8V1PkQIMSuLBSFpYKw/pXttsBGp1AM6GOKJKZ0ybJiG71mROSK?= =?us-ascii?Q?65XMA5z9UKvOo6kLJZB4X0JzornGieGLb/UjOFQNZJF9nuwtSpSzJSAsJjaB?= =?us-ascii?Q?8pn1ALGUkOucuVL7FJfYAQf/MImKY5bc8cHwa3J6AK5tLQo8w4dIMbeD498N?= =?us-ascii?Q?Dt/Mx3ULOYB9biVXV25MREmrtFoEzUWjnQGq2POdtD/Br4sUT8U2N3L6A7aH?= =?us-ascii?Q?mXbhBp/2j0yB7ERXTLx46kqRqWiWfMfAyIgS2gJZLdxwaD1FXAX4+gAkVGkt?= =?us-ascii?Q?ugjaKRywbOLJkJvNSY8bLdBUgnLsyTb9TdY3A6g8wVO9KafNAVrPrhJa7B+Q?= =?us-ascii?Q?Wnu/a8Hxv3xnIyKCjuEjMZzWBQAttxDF3biuTuJhp++6qgeMrOd1F3Mm1ljN?= =?us-ascii?Q?1laIgSzcUxN4vGBr8deL8rkVRRl9C8a1gU3vEbDmPrBnRH75skKpNMEhHXU6?= =?us-ascii?Q?cWRh0Tf1KluWpmcbXQT3KT4esIHyuyki3wY+Pp/B?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4ab588b9-44bb-4e7f-abd9-08dddfa7e15d X-MS-Exchange-CrossTenant-AuthSource: TYCP286MB2162.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 05:10:29.1480 (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: cXXsr33pHhGhsNC6hSDerg1SZCrHeyzK/336aC6nkgf6Rpxit3kWUpMRC98kQqCMMJXDokAdLego+tU/3GSung== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYXP286MB6089 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Wed__20_Aug_2025_14_10_28_+0900_u9fdIbTgN.58HH3l Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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=_Wed__20_Aug_2025_14_10_28_+0900_u9fdIbTgN.58HH3l Content-Type: text/x-diff; name="v3-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Disposition: attachment; filename="v3-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Transfer-Encoding: 7bit