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 1ukDiU-00HCRP-C9 for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Aug 2025 03:24:27 +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 1ukDiS-003gCx-W9 for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Aug 2025 03:24:25 +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.94.2) (envelope-from ) id 1ukDfj-003aBO-8v for pgsql-hackers@lists.postgresql.org; Fri, 08 Aug 2025 03:21:35 +0000 Received: from mail-japaneastazon11020097.outbound.protection.outlook.com ([52.101.229.97] helo=TY3P286CU002.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1ukDfg-001MtW-20 for pgsql-hackers@postgresql.org; Fri, 08 Aug 2025 03:21:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F9ZOdKkgAWGszDzHRult7zArSkrZsBQwAf3rVS9GppeCyxiDsCzE/lJFurmWxKyg8vhgW9RDbiRFlRDUZzGwzggMIer38EsdwDBBNhhxZ0P4q2zhXPq2hxWlg5v5LlgAeGNFCQ1v9041fqGVW95XzVa46UOWD+Yam3NSDcl9ivphV6n/cPK7k7h6ltU1F0Oo7VWTShs9kv19iryWt+6D9EDWM0cz57VWIvi/WOOkB5ekyLCVSvN+Yvg5EGiOZEtqW9HE9gsdxQLg4+BHVz+PaIjW6Y1StWO2oPH6NEAqwQ+jkSY9TTqIzEjiXTboHWoG63cZSU1MybuLFs+rSdVmjA== 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=gyEcQ2UQ36pOMUfz1duJhSB6KdoTrYlrQDqnood3Hks=; b=kcLrtPaUowxPqC/dAndnvfs9Tk6DrWjF8q/itt5dVPXEfmzGF/tyo6Km4WHD380QtcTmZ371mK8BeHoHzUdCVQP8/kX+p7euDw7zDwPSeovsopr6k/O10zM2Dt6zLYerEacPgofn5g5qMsOXNmYRfIZm3HHlKb9XyRvNynMRG4gyMZ8wLn1dpG9G0eQn7ld/VoSHtSyauz8vUgw1/Sbosm3juiCr1j0C8tGd6e6DPZYJ6lgpKa/ILCZjQsdj/WQVvxW96r+gkDwmLHXI0aboq9/HLFXTYTwOY/8oNqHFrBLWSNDpl1VP2tGxyUgscv/UQVaS9/rGgOucnnWufiIu0Q== 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=gyEcQ2UQ36pOMUfz1duJhSB6KdoTrYlrQDqnood3Hks=; b=rITxglhYbjRBnJ/cRlQGWCmMhO+wBxqhR/1LbNAhAyceMqiAANg2E3fVN+5p+jWqJrRHYk/LaSoWPe56yFXk0+YPh4Jv7ZSEyF9gDM6/8vu+QzRPrdSBf4fPe2ZxMcBmcmu6yJxKjIAe7LQpJ29CEj7XZEO6qc+cG54QqP5dln3k7DHVRCLI8gj1woRcSNGiKnk+qm12lNNa1gz0bY+US0il5jADPd/0bGuK5R/zI55s3v6nOxaMp6BGFuWlsNo9k4lSBcDXtX9ZB9HbKDvYEn0Yq6UXDzFFBPkGTY0cOvvailD4yBWuYOJOS1vAdduCnI0piuv1LvYbUX/t+CLzpg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sraoss.co.jp; Received: from OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:189::12) by OS7P286MB5555.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:370::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9009.18; Fri, 8 Aug 2025 03:21:26 +0000 Received: from OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM ([fe80::a4f:22fd:288:2dcb]) by OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM ([fe80::a4f:22fd:288:2dcb%4]) with mapi id 15.20.9009.017; Fri, 8 Aug 2025 03:21:26 +0000 Date: Fri, 8 Aug 2025 12:21:25 +0900 From: Yugo Nagata To: Yugo Nagata Cc: Andres Freund , Subject: Re: Allow to collect statistics on virtual generated columns Message-Id: <20250808122125.e9eaff938f8c83556f337e50@sraoss.co.jp> In-Reply-To: <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> References: <20250422181006.dd6f9d1d81299f5b2ad55e1a@sraoss.co.jp> <20250624170533.3caeec7d6034cd5ddf4f00d2@sraoss.co.jp> <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Content-Type: multipart/mixed; boundary="Multipart=_Fri__8_Aug_2025_12_21_25_+0900_yNJX4hBoaUaCAKCp" X-ClientProxiedBy: TYCP301CA0043.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:380::19) To OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:189::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSZP286MB2160:EE_|OS7P286MB5555:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f3e51ec-4220-4585-0707-08ddd62aa85c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|4053099003|4013099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v60V6uQe6fdThWpml5MX9bG0FdVWnI9VQUFPZ3j71RI/Df4AcDW9I0DlKJGq?= =?us-ascii?Q?M6zQY62WRHWr8HVX6Zelf3tytu5ZvG4F2phsT1g5yyPP+3wofJkbfdgmuWq0?= =?us-ascii?Q?uj0Yiluj5KVR39yH+wnikU9m8JahQj5g6HeNB6QgPtqNmyciibvjsEmDqbUv?= =?us-ascii?Q?aVYfJsOGzEX+9jKJMzw4+TckP3SCPpsfR4Qkk5REYfMrGXfJaG4BQtRU1/xL?= =?us-ascii?Q?Re2j+tdp+MXPTQP4gz+1cBniuHQUTYE76vve46XakzwephhjzpVTjMt4SiuD?= =?us-ascii?Q?kNYOXTnEaPSLRbvzSqaal6uO4q5LmLITk+Hc0RGYyhBjIK3cqdQM70Kjalnx?= =?us-ascii?Q?UkBO9JAjjPTfo04wBbEqUlnYGDn8LsS7AWFJe2Ff4vnw01N8Kkw5Xvu/FJVd?= =?us-ascii?Q?/6EqepSkHGfEEp6Wj4tYEOW0mR7bhJ27u7g+vn6BLy+s7ho12gwgy7iimuQ8?= =?us-ascii?Q?xSF5sm5uLkmfjJuCf9lrZsEhe9WbFPkkVaZXh3SfiFLMzsDaoCkHU0f+yew+?= =?us-ascii?Q?KgjRxHyEe7H3Oc7/vIg0caGrBHfmZYpvnKK+3wEQ0XcAHjuB7Thu3KL71mHZ?= =?us-ascii?Q?GDmZ6PHUPKJDsM10bQA+L83AN/iPvRTAnVetITezzmGSzOlhkxPd/WHFaq6A?= =?us-ascii?Q?pko3LJhVc9O7GKCc/aPXRXbP+4+a5bAYk5YtyLHKPy8yxzHifG349JvwWnvJ?= =?us-ascii?Q?dah9f//f+E/HjfydzBcDbNFN/zSMknmTwa4lwDMxuSSlrhqvRlOp96sCy6v1?= =?us-ascii?Q?3bhCuWzeiozk6ilotlwsJiXUqDu4fNm6rYoceNptLde4FTCAKUyDMBcsblFI?= =?us-ascii?Q?sh3vbxpZ+0zCAU8omzZOzXjOhOhs7ps/U7WubyNwU0IG97daImvB2v7EE8dm?= =?us-ascii?Q?e/E4wJszL4G1T2cl/SkdLhuZTt+CaxzLOdzmecOvyHyDaTMDmrXfOyJs+AEJ?= =?us-ascii?Q?06pgLGi7v2dbVTL+InoaZUImKobx4yF66nGRxrUuYHbbl3mxc+/gIKaXIdVW?= =?us-ascii?Q?clREnSL2btkE928Amtg8S6WScbQ2uwXwp8UvcBGX7TNiV7z/otqbMBpp2qhU?= =?us-ascii?Q?Rpr8CXgj1RECHTm3wnHJXAnwBkDq5pBuIqjnJLmDPmRy813DEWtS341Xwykx?= =?us-ascii?Q?e4/JB+dVX57VQXF0QJgeYSTCQyGW19uNvlDHTNXSal3ZYAM61YedQjwLf/GG?= =?us-ascii?Q?Z/YOGLbvHXuWwTRAem/nsVQ8QR82aSs1S2bUWly4r6M75PMbCN7bcTNxGJQt?= =?us-ascii?Q?dC2f/gCvkOoLgTThlAqbnZ6OtP2R0D5u20px2TXOskTyawipufyPHy4/sASH?= =?us-ascii?Q?K6n/85IBpq1nTCBTVuYbaApSFkNtIgWm0abyjG2N9vnDrZz01xx5MthKx3QE?= =?us-ascii?Q?Lw4xz1KHgAHNHFRDw3XTYH0oJf67IAFuOPMdpEcOCB19nSnCKrzL6e5ksCQC?= =?us-ascii?Q?Ce5vNfZTMQU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(4053099003)(4013099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IIedV/X2Oj+VooPtwV+ewZmjtsvRTTMbOiAVq4AzAdVV4Pj00vqqRUjLj3Mq?= =?us-ascii?Q?wrMj7sD20OIO36JSVTRvkQolXiDDGkCOxqt02JmrROKwH+klAodyXGnbC3Vt?= =?us-ascii?Q?XZF5itL7mJhQD/9JTtR3d48prJUsS4SxCFCEeZtgfCwtCZV87FAxYhR5yif/?= =?us-ascii?Q?i0n/oUc07Gap40/vj0jLBlMG3/fkQUOj+oJ1i20NUwj2Mw+2oQjaTZqZ+wuD?= =?us-ascii?Q?PRD5BMoKIecpxUh1uIn1R7/rzOlFQ8u6H67ln7OGeTIuLRSM2apkALyiDtWL?= =?us-ascii?Q?8vZAwmdZcc6UNUYmehg17ihmm/GuYu+D2WAu2lsOgAOiWb5DzAY/fsZo+GOd?= =?us-ascii?Q?BSCJrtyn3xsDbatZHc2AOqbrVwxnJ0pSdOw3Dg/g8g3YOCOnWmXGNu5HYcXt?= =?us-ascii?Q?JECMHrzyiIwcA72g9Ca+X5CRPWWOoa/uS9HWW6V/Sgs89B4llgHUddGqjlsf?= =?us-ascii?Q?XCBfkzrhXM4BnOSwu2O4Nd32OwGJNmq/WXzQbghCdRRicH3MCairXuArqM3F?= =?us-ascii?Q?yhKpactqczeQzqMZgkjppAw7OjEiZ+2VQ2ZbykfPHCe1B6SF1SNcl+mXxhyf?= =?us-ascii?Q?XYdBNX6hbDQvQqx3OC7wGQq6Ky40bgyB9Y7FIG2o3wFWbfhF0NG5LnxF8985?= =?us-ascii?Q?WiUQv/Uwih3iwjX+ehr9X87GjnylS9j4BYbY2qy+qEJ19BZlC362zgJDIeg9?= =?us-ascii?Q?GOJ7PQX4A1XDkzq64QjBZI2brW8zedNBfP0WbKAUSpnnoqkrhdm69iCwcBAj?= =?us-ascii?Q?Xy9FWV7w4mnnw11kpW9E40UIbTnJHGTpwgGzvfrnVXlAa2Yi/w50olXWDIdx?= =?us-ascii?Q?mDiuvK73VlyNT4H78dbo07Jh6TqaqIGRyvKPraC+juntoKdlIBhipkZX9xnG?= =?us-ascii?Q?wPQ9t3/6gP9ueOnmlqm53Cc19LFAj6uOk8+isTH2w6kIzgcQblb+OcqQR77H?= =?us-ascii?Q?di50tVcIgW5iR0e6JczomaU30WuHd0MGDAjSfE+oIT8V3wd5fRUzKn+NFUxB?= =?us-ascii?Q?DvwJPbu7tDryMwv43GK1VUPTqW26gpPckLoM59KwZyO5rJQQw2qZ7z5wqCL0?= =?us-ascii?Q?CRDSQfOpOMjIZMw9crRDhnXJUZsI0FsG2K9JD5631HARyMC5/5LaQ6JlIiOH?= =?us-ascii?Q?1GEDH/eo2azCvdQv8L2cAZlO74mfWTIHhoQ/hwrcNpQVesXyxdxxAlXnbqnR?= =?us-ascii?Q?kSe2XWTnoKSvPytmXfRlc2JHrpO7bNxVvRSV3+i+EayjjsVBuDiwCEeWia0Z?= =?us-ascii?Q?KqdyKvkrRx70m7syhE3CuYc9pf2Es11m90u4eoLQ3X1+xY6CCPKGUeQcKa9z?= =?us-ascii?Q?4hnb4WxvgPVEm3rWcskMz3PBicvOu7ACHU+tbf96eaxP6awn7cQDTDkc/dk6?= =?us-ascii?Q?wO46BgEV/HD2Sje1XFF1NVZ9HuCsYRLJwdtaWQnWfhaMxB6IgUd/ruYSC/Il?= =?us-ascii?Q?sTYqnaITBccgpgIraey6j4eC1PtSmH/9A2Vdy2IvW877Kpkk2cHDSW/icgv+?= =?us-ascii?Q?AfkiDrfp+eTULmiplk6qpDkjx2nUlNNgLSdZPznXxQKkmpF/FPthjfFEy1G+?= =?us-ascii?Q?pYQ9whTbw/CNTD3sRK5n3Xoic7gvxztruszeVJW7IGsDl5sdZ6dxXtpnk4fu?= =?us-ascii?Q?IQ/fU0gpYJ+1lCYb31ySM+jibbHObUiHnX4LpXj3930w?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6f3e51ec-4220-4585-0707-08ddd62aa85c X-MS-Exchange-CrossTenant-AuthSource: OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2025 03:21:25.9403 (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: Fjbc0nEwbcRHBqXvlMDHuSEbWyDDK6/7GurgMJjIL3G2dCxQr2nb2r2UySDdwc4a7Zk94TFX3jCLArzoYw/PLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB5555 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Fri__8_Aug_2025_12_21_25_+0900_yNJX4hBoaUaCAKCp Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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. Regards, Yugo Nagata -- Yugo Nagata --Multipart=_Fri__8_Aug_2025_12_21_25_+0900_yNJX4hBoaUaCAKCp Content-Type: text/x-diff; name="v2-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Disposition: attachment; filename="v2-0001-Allow-to-collect-statistics-on-virtual-generated-.patch" Content-Transfer-Encoding: 7bit