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 1uhVD0-000gK1-MO for pgsql-hackers@arkaria.postgresql.org; Thu, 31 Jul 2025 15:28:43 +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 1uhVCz-001tyV-D5 for pgsql-hackers@arkaria.postgresql.org; Thu, 31 Jul 2025 15:28:41 +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 1uhVCy-001tyM-R9 for pgsql-hackers@lists.postgresql.org; Thu, 31 Jul 2025 15:28:41 +0000 Received: from mail-japaneastazlp170110002.outbound.protection.outlook.com ([2a01:111:f403:c405::2] helo=TYVP286CU001.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 1uhVCv-0002jO-2V for pgsql-hackers@postgresql.org; Thu, 31 Jul 2025 15:28:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lsfYD78u5oI5gsUoK376Gt40eurI4AaDfA+1h0wRCouh89UJwSKeAuylh02dqklQpOkCdxb/lLFeJGaZZOpp0j1vFm+bLiBOSqk/LkW9mpblQwwFOKHaVU0mY2LdnVw6/PQAEKGgDpqOEvWIk4W2yFihT4im7MG++dnKzA8l6ULdB4HieNan0pnC5T0bDNd6XUK/cY5YFmcV/gmeaLRlGFvEIy/a8hHUuxYL4Yv5xLzXqTfG2B0V3UvZDyWfou1npJGH2SX3OLeBPnDxLa3ZU5of6x9U0C7Bf9LRgEWpCnphLOU4yMFtq5Fnj7BnkoSfvT6x+azCK+zbF1qAsym/ww== 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=iBx5ZgXDk9jhbqR5unXHQGYriZ8M4mRFIn2FogxXFUM=; b=f1eZu6JM1pWCI0dOP7xeF1CImkJe9ETrOyE4nBZTonYPvhSjcb56gYfP6qGyZb3aqHiy7zKOoEc9YT9q9WU0mShK+17kFU6F9HOpbQUFZcOYT9/MpvtcZV+bIDsf4gMvVetbj2xVDscC1SnjJ51LeX/IOeg5fEb0Yk8MV66WPIV2rgpILHokYuLkvJJTXVfezk0/DX6wO7nvoXwysNytW37UUHJxQh5T9u4xN1puskbYSpcQw3rGaGv6FDCDGbCzc1qKz/G75FXQHQizKR0ZSvbGtINW2EkBuDZ1onfA07UGV28oAZvJ7l+yo43GwgAj8z7GozCTQQknKOq8v9nghg== 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=iBx5ZgXDk9jhbqR5unXHQGYriZ8M4mRFIn2FogxXFUM=; b=me/GsnnviSuYCbKuI4gvMkTXtv5yYN72LPzhTxBake6+rcmpzw08onRhNRIFoBU5hiN3Lsjgqf8Wj0OLDhoGKJfFBtPicEdpeJ5nQzVpzy45lrLO6+GnM88XEiBMyJeOipQFMTMoa78KbcW7EMGM4JsyzjU7XwF39/7GQorZw3KmWBETrDnmRAC1SQDHKKbo46GmpZLWjT9D4kHD/CrE/2iCPGl8vmcDKU6g9JqNdLvtsFFAEIkjVrBYOgtJ3oLgu5WIXD04ozdFrET5J9MwTZW8PGrLHf+HKa/kj48DLw/UDzpDfO4fEVLylKfC/IUjcFwDytmyNaWT5dWEAH8cSQ== 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 TYYP286MB4873.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:143::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.14; Thu, 31 Jul 2025 15:28:31 +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.005; Thu, 31 Jul 2025 15:28:31 +0000 Date: Fri, 1 Aug 2025 00:28:30 +0900 From: Yugo Nagata To: Yugo Nagata Cc: Andres Freund , Subject: Re: Allow to collect statistics on virtual generated columns Message-Id: <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> In-Reply-To: <20250624170533.3caeec7d6034cd5ddf4f00d2@sraoss.co.jp> References: <20250422181006.dd6f9d1d81299f5b2ad55e1a@sraoss.co.jp> <20250624170533.3caeec7d6034cd5ddf4f00d2@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__1_Aug_2025_00_28_30_+0900_PkRV9PSGNhLRtsZF" X-ClientProxiedBy: TYCP286CA0346.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::14) To OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:189::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSZP286MB2160:EE_|TYYP286MB4873:EE_ X-MS-Office365-Filtering-Correlation-Id: d94ef002-5c0e-4b93-4c5d-08ddd046e78b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|376014|366016|4013099003|4053099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?N8MDWAp7dK+Ov07QJPCkBGzEpodpkLMaqBF/ZWsFqG44JFwW4taAKZHpT1bB?= =?us-ascii?Q?EIufgka4PFFl36fQHNZexN/Pc56grm3T4EPBSEW9PueWjvIqWRGfrpVonuqp?= =?us-ascii?Q?U/ogope4wNs7Jbc3dLUbLnrITBgUu7lEnwDPcUzFDPoaKQm0yrbzNUSGjkl7?= =?us-ascii?Q?RkZdZusOTMMIe+Xo1qHyvXqELbggY9x857SecRtCvC4V2XgLLqTiwhZ+wEO0?= =?us-ascii?Q?Qz6GozZTsP8QR/UO62NFZcpPZbKxPoy8Rr4xFVS0SBQsuqi5NJoGaxtAPlb1?= =?us-ascii?Q?lSWCuCSo2yGesa6PId3+sWgvDxTmKN/eREU7j2m3ri4TWYC/qIUWCY0DOVkF?= =?us-ascii?Q?pdRfVx+2L1kt1nwA/Vwm2ekOQaJ21aGhAmid0EklX8dyBp96BGbmIFvRIQt+?= =?us-ascii?Q?1mo1BeGminJf+6drKvLuBAymt6yukREQaU2kxFxZTfEmYt41JmcdebhVI7qD?= =?us-ascii?Q?VDhbmbBb7zgAwPRxOBroWO79ROeOgRcxJMyTm1WTJXPVYKq6wweODpeXL86B?= =?us-ascii?Q?F1bLLFbQgoL4V0dc8tASdflTUBrtb3b5MQKWel7de5ro3vzqrBVUORYAji7U?= =?us-ascii?Q?Oqi23qw1B0hdDX/ZroSnyEMc1q8waO229Z1eBOE3mKkpom8UxxFpHPTYkCfx?= =?us-ascii?Q?8JWBGSRnr7WRhJSBpNBGHN4p0hxkDbJt37vGIiGcGzuZMkwCaZS8PoHp2tR+?= =?us-ascii?Q?n0UF6sygCqHEk3iuu0/rFgG1OuZbc8wQKlT6dyQ24kcQOEa4tV6hn8nUEiOI?= =?us-ascii?Q?RKetVHApgYSA7EgJWlOxtNh3+e7cXYVd38AeoVNUm7IgXPN1A8M2wZ0mbPzn?= =?us-ascii?Q?wsgwCrWwS3mV+v8dPb4+1hu8yy/ANve/zBiQvLJ8oBga9gc1bPh0LH9lK/Wn?= =?us-ascii?Q?thkpfTWmirvyR13cepzwTR+T+8OneVWThTmnwspham9uqjWA5BTB91zoHvEM?= =?us-ascii?Q?w93OuBy5ddvfa/2dN8Y1c5AcMSVKRA18F2zlCT8ejH9Wj5y0dGlSwG6Giruc?= =?us-ascii?Q?d+WIzYU+laUD530XrgmfUKO5cNmliKo6lWuUnV5BXLiEXLQWrG5NBXSchuI7?= =?us-ascii?Q?8bfjAAwUMUE9qbjTZoiBSKVdjFy1oeWW4leYd35uwJGUh2Kj0eCXwEsT9TqE?= =?us-ascii?Q?gBU5V82AGHsomeSXOp4TOzye0A1PEzC4u+U8HrvQKukqOlJn1sEMbyOD66li?= =?us-ascii?Q?I8bz9Ilb34H9/XRUb40VD7f668lrU0S9OClx1jjXUr1hbDqyj88TSguSdF8g?= =?us-ascii?Q?2kTpARFMIw89y+1o/zV3PkX+RRDklWpw0svo9Z9SiMSxK+D4NbyT81/gdn1U?= =?us-ascii?Q?zE85gigDWZ/YeU0Djn95SLjbh4c8gx+6Sev6dgwxF7/FG3RIbMgxSaAug2Up?= =?us-ascii?Q?0zvTLUTSwRY1Wt5n3DjekBdiXkH0RnRo/8wFkkI8rjSWVo1qWcAeFCw9qNuC?= =?us-ascii?Q?U7Pv8tiXJAc=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)(376014)(366016)(4013099003)(4053099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YtOT++zUsVoEgnMWJ7xv8lYBYw6B4DgmOv/YeN53WT0BCJfEMMmjPacNGiva?= =?us-ascii?Q?cQdGz4yfP+zIgZ+HUFPJn6pXIO9UpCsMitUJlVNi/v+VoBOc0FkelrklquHl?= =?us-ascii?Q?ZInpLSJAwSueCRpmJca3YLF5+OHexsqIwmyHIAmLGEwG1q9RiitPiCZGfOsz?= =?us-ascii?Q?ELHQVXN4LMFWqnshpLJXh4XFSEs2yGmpMAD/6Tl3P6JpU0ucifUX1WzkqZtj?= =?us-ascii?Q?LVsu5AGNxG89S1OpNTVu8iqvp7ytkDumEOu8WWNa6J5cUBSSN4nirNULdx16?= =?us-ascii?Q?nUoXy7QAOvh0Cpx/kd6cdUqWLZ3vjWMo64QWaxltXG4ozIsSem3QVzDXP/ww?= =?us-ascii?Q?PCMQNhz5y1tTn1DyXGAW4g172uRFDWD92CpTKV6R++hmUPA/hZZnF2DaROVq?= =?us-ascii?Q?Zfd1v00tCsOMxkdQOtAch7rROKPLicJdj9EytDf74h4g+f0a8zdvPKHZ5gga?= =?us-ascii?Q?f+KPd/z5SIN1b38q4Ekrcy7ZJ6GEyQU+JwK0AwmPzYRPIHWDY8vX7epNZTHb?= =?us-ascii?Q?qeCWVnJKTcRcHy+lsIYeTMOYjGNODaJmPDkinWX2u0m+BHX/rEadWrNQQpH/?= =?us-ascii?Q?paL/J2lsypX4uaDFjyLBdxt8CHk4EVHs1ac5YwcXqpFeSO605R+eaC8x2PjH?= =?us-ascii?Q?I6eIjFjwfk6dKpRJ7Cjs9Ew23aXXPlZ6/yUW8Cpfn5EX/aY15LK0Cpd07/Kg?= =?us-ascii?Q?a0ac+Yt0mr7JbfEEcUSnfLdzbiqSjyk3yL9+QNAWesxAwFKNsL7GhYqGtYUk?= =?us-ascii?Q?l8rQOn9NghNncYdUD1bL4PUpgmnQ/DzswKwvaBO+Tc3jXzkyNRydXpsRc2Zb?= =?us-ascii?Q?1MKm52JLr55iLJBMUmBmHN7iyv2kIhnP3Zpxw1qm/tZ7XnuSCogpP12rVP7t?= =?us-ascii?Q?xSA64JXJk0r5l79DNSCCoit09GytQiK5lqncUWJkLSxSH/XvtI6fFbNZ7xwT?= =?us-ascii?Q?Q6ThzDlTWh1clMDz4/mpnfpUtOrPIsnR8R26u1RKVUc2vc8LggOLJ9phNWHZ?= =?us-ascii?Q?Jny+GZPbdw396Fhv0WXdAlS2caczHNqci8se/VXYkWddYX2B02hlymc9wm7n?= =?us-ascii?Q?XlaFskpL/VmG8xzCcBctyL8beSb4AieWAMMpEhG/HAIaFvhRG6yt4Tv6waDG?= =?us-ascii?Q?Dc781mgFSe+M7BLcRRiPqnEnhwyrtQGLGsfe33JM0tOAkWZxna8PjEtQby5D?= =?us-ascii?Q?zznJzwu2mNy4lnGTeE4Fn05IsEPhOcPftZPRab2uhae47zqoKwBR0MYZjyWd?= =?us-ascii?Q?GwLft9EZn3NIWPl2NzlcPGsltfXxiS8sVXAyQTUNQanGZAYvK36+OTp8T5f8?= =?us-ascii?Q?STMsR4tS6953sjp9YNaF22x1a+KRVXe9lJ6WeJpfnV+tadJT2Xy7mp94VwaC?= =?us-ascii?Q?FpL1iUWlFB4xPkaUOYlvlv3xxTrcin5nw3kCPPSsygFKS723sSPi4KTQIaQl?= =?us-ascii?Q?iQMBaWnLmPmFTA/4PBotLl/RXUr6FFij8V9fyDAhmzjiOILmZzEH/kFrWo26?= =?us-ascii?Q?8HuAUHTFC2GJBwW9a0l9Caeenmwr/44YEQyiBhK0Phb68ioYNSiMGSXSPXu2?= =?us-ascii?Q?mulZ5ux75Dssr4WDMjkl/s0JRfF3htu7ZR79u/BXdy+l3aVMYbHjkcH+aQEm?= =?us-ascii?Q?FkwB0/WNOID2H6eBuJ3Ki3VR1Xk04fNrsNDmxu6KRjxI?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d94ef002-5c0e-4b93-4c5d-08ddd046e78b X-MS-Exchange-CrossTenant-AuthSource: OSZP286MB2160.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jul 2025 15:28:30.9515 (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: Aw597O0Fup6STpRgkvCg/fz1T/RJNbvXxotCbt8uurtPJ8tQhAAJ8cgXr6ibYFRQOJw+jzWtIFBMFWerf/KvuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4873 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Fri__1_Aug_2025_00_28_30_+0900_PkRV9PSGNhLRtsZF Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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. Regards, Yugo Nagata -- Yugo Nagata --Multipart=_Fri__1_Aug_2025_00_28_30_+0900_PkRV9PSGNhLRtsZF Content-Type: text/x-diff; name="0001-Allow-to-collect-statistics-on-virtual-generated-col.patch" Content-Disposition: attachment; filename="0001-Allow-to-collect-statistics-on-virtual-generated-col.patch" Content-Transfer-Encoding: 7bit