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 1ta4xY-00Fwt7-Dj for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jan 2025 03:29:49 +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 1ta4xX-00ARBo-Gr for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jan 2025 03:29:47 +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 1ta4xX-00ARBe-3R for pgsql-hackers@lists.postgresql.org; Tue, 21 Jan 2025 03:29:47 +0000 Received: from mail-japanwestazon11021115.outbound.protection.outlook.com ([40.107.74.115] helo=OS0P286CU010.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 1ta4xU-000e9P-10 for pgsql-hackers@postgresql.org; Tue, 21 Jan 2025 03:29:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jVB/43lCphmpO+/1oN28hqZLyhG2u+SvbRSqPnhfRh4QqVxeI/M8I1KMt+wDiYsOhIcxwdEdxoLnNdsEQAT0ukszgj/t9MEYsgYiWLZTUDBJfiYM37l0hvGsTsFdL0JxLniLy559LD6dX+PC5bYgabq3oWYpd+/vht1hiBAUZxG5mI+SG1G26taoQEgiQEFTVFRMlQTPr8ExfDtz2C2ffHXdBfZgecjYi1182IKExRhvZVL2qt4rRRpqauMA0hb2EXeZnn/fqbQIAdacr4wzCmhD7GGtB3MfHVr+k8SkgJyhmqi553E4CD4oyoxAmDq3N6UB2idtgkLheDaDFVNfJg== 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=lNvUa23yYAWWbDqz2aYMjA83igOCuShAkynRW3agnwc=; b=LaDHItRNjcXVuyvgrv9MITkoiz/+awQ8TdRtc/Wt8p9ArXvJSv3dDl5P9UF//6wVvcR+qeiqdQC7uO5pMQBvU9XK3S6ISoBfAbKjjJQbz1OiXvkKRNvBApn26Yj6Lr4/tTEizk+GNwEAA7lPL5kuftIgtrPHe/SEOb9z4x2ItlQv7cGv++QqFW5y91drMZWll/gTzfKMSmnPD5Jc2cPTyF9o6k+3/Pt4yed/qW5t5W+2OodoSSchvvLP+mMA3rOkiB/w8cm2pZohAeoxCWA4Fwyq6c/8/RAp1gWj3/IlosR4nzrpsmBW1EjAgLqR+G38cIgE5eEKBJwY4sO8PMDPdQ== 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=lNvUa23yYAWWbDqz2aYMjA83igOCuShAkynRW3agnwc=; b=LCVZRMMxOCXnlHDZHCHvs2FZcyMVmo0buQJo9tD0brVyHx2QOlSgYJKttH4+ifYYSLAYPolN/GsPk67wCpuVisSXxgjIpdcNpZtpnksXJ/nwRlDNclhFm/tZT6GTZwLKAMDBC3n+uE6X/EwZYu5Kmn2YMu+HQV9/Xqh5rBx2Jdxjt1WtbIzNK2LfNQ2252XsypKo7eKZAv/yYBcYPhyOhh737ougy2rKSRhrEgl+HNVe7e+cXM3Y3IvqgGFjn+6kvIoKQgIbJJYGmy7rX/lPLf6UOM7NEtJ7gSFMTw/7jdvft97H7TeD7GsCKfAJ5lA5QzpPY+iZZgMkN8QQR6opZA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sraoss.co.jp; Received: from TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM (2603:1096:404:8026::10) by TYRP286MB5418.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:18a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8356.21; Tue, 21 Jan 2025 03:29:38 +0000 Received: from TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM ([fe80::42e3:e942:b68d:dfac]) by TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM ([fe80::42e3:e942:b68d:dfac%5]) with mapi id 15.20.8356.020; Tue, 21 Jan 2025 03:29:38 +0000 Date: Tue, 21 Jan 2025 12:29:37 +0900 From: Yugo Nagata To: pgsql-hackers@postgresql.org Subject: Add a function to get the version of installed extension Message-Id: <20250121122937.edfdba2b3dfa3dba330a6b66@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__21_Jan_2025_12_29_37_+0900_sBPyJl9O2wESf/lf" X-ClientProxiedBy: TYCP286CA0043.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::14) To TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM (2603:1096:404:8026::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYBP286MB0111:EE_|TYRP286MB5418:EE_ X-MS-Office365-Filtering-Correlation-Id: 71276345-db31-4fc3-74aa-08dd39cbd58c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?nJuRMiqXAQd0tSnfBPPO7QOsw0879tUOYNysWsMAh+0Gf+TB1UduKIqESKm0?= =?us-ascii?Q?DxxlyhKca8rZq/c4eRWZ0EvxV4CKiZMPOqShBpgA0Glhf5B8/jSLt6AwPsTs?= =?us-ascii?Q?MwJDP9b6yUkA6DsbdwkXwUnYgS32HEcR/8mWReXJCv0py8/YiZBYWhJnJ3nh?= =?us-ascii?Q?pSDuX97rpWymUgmVKc28aTTSKPYMMuMnALgalqjgy6vPPE15MYYMIOiekBer?= =?us-ascii?Q?XnsouZYtNEglpjl6e1Pv5t5AW9mwC8rLXyMld2vr0wZa+0REX7vPVify0dHL?= =?us-ascii?Q?BwrVEs4mrW3Nw9j/ELMeOs/m6FDdRBiJ4eVC9p8SEDqZN8wxvYFZMjsQ1mko?= =?us-ascii?Q?AeXnEGgYyUSQ3rTDbz/I60KdE1dxAcmVKOLyhxHJxl0qfw1TAOBpStg5BSnF?= =?us-ascii?Q?6RrN1E8zpX5FNjzT0SnwVROyzMBzG8SnN8W5VHKyWWbKMWRYJXcyi5nU58jN?= =?us-ascii?Q?XRz7lYT3dc29ckmEojo4P3AYpp5HZ+jpcc5AzEuzRz7Ae0Jqv9viJgKwRJK4?= =?us-ascii?Q?CvR4zog4MlQvmCv14XBtwt8svYljgErTCpi6GSSyRZSonbGoILAFdLXHIQsr?= =?us-ascii?Q?i2o+TTcuOFE+QtCPtToDLi7hQF4o0Z7gRJGFQKcU+0V8Nn2UvczIeGUQWHIX?= =?us-ascii?Q?opcVN4++Kpw+pU4asbgnIB9DlLKCtJu3N1mTF/4AvhcRln6PNdceiLAj15Pe?= =?us-ascii?Q?HpycGtYsEWHR3SlZ91qSB5omQJanz4BUVPPAkXCw5qzbHg+60ZYBK8jze6yN?= =?us-ascii?Q?HbgFLJRHwZKnuE5MZTKLPleNWNYQMxTQpHltmpcf7S6a9U5AdCkoXAl3yvzP?= =?us-ascii?Q?YZr//qy9VzxaS1F5TSthJCyejYIKuy8YeQ8M8uAm//6186pe6Hdt0RMY3D6m?= =?us-ascii?Q?JqqP6c4lCEfjUsVkHppOsPDPbB+t/t4EhxxIYHDQG/IJYdYpAsZOBSA7x4Lk?= =?us-ascii?Q?ZO/4OCE4rCwpMxyCgxSMjOrr+fL2qzVBuNMeg/QjGyXG2b8q4nU6TXMfWlTq?= =?us-ascii?Q?X3ZnWNsNIrVe3tAVtG1iiFSxyTGVxvxVs3Fu2n1Qjr0cNZz0F+JPNyTQXDbj?= =?us-ascii?Q?8E7FKVxb43ZEqtDFE9uQFhdziiqKaiTR0CFPbMeQZGLkkwAEtyNlT0kNg50j?= =?us-ascii?Q?GcoXUYM0fC32IpGSJWyUiCn9ZU0AwNHJpsTa+WiDEabWm90GXxlJlslrArm/?= =?us-ascii?Q?jYsvg5HC8O7bw4wTU+WfzfsJ8lddpXGA0DbMTpVfxf9qcI3ai7LhlgUJlKI1?= =?us-ascii?Q?TAtcLCJF4UBkZguG5RbRO9oDQIKXUrqbJwJvyzCS5gVBbn6G20M0ZFyTsxgM?= =?us-ascii?Q?RLsDblJFcYwWiEw0MNp9+woQjbLxP5ekas8kXX3X+cOgvS5V00d1IAndNa1f?= =?us-ascii?Q?W1PsL5T2gYrzgPPepfpX0lEoUs+X?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(1800799024);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?k177pLfFKcNnF2lnbT84ZbAtDG/t4IyFyyKN/4uiHvOMsPSet/CYV/dHCNj7?= =?us-ascii?Q?EanW98YqH8h6oKnS0Srbomd9epDFp7llHxnj4YVgpVTkhN28lLmy59I5S/Yu?= =?us-ascii?Q?mtUI1u3i+HY3Fvoq1ymK1l+mELLPHYyD4UYBqPXbEX4e9THjy5uvF2QFAzEO?= =?us-ascii?Q?hgybYonzvWCG7Y32ca7qBXHR3SXNm5JgtTaKYZefLss0Essi5kbYsksDzO2z?= =?us-ascii?Q?wqr7DqvGNJJwA773R1JQxay7QtPbD+RjC8Wyhlk+FXMNvZ0L7V9v9YGYfjxv?= =?us-ascii?Q?DYjDQbh96TmFRLmfGHxNXuXRpjYi894xc9FkoopbVr9wl4uTFAM1RIrEITde?= =?us-ascii?Q?5qJGopzCeL3qDNgROVwJiJ5phOmd21wo5+e2mvcCDMJ+TPPkV0q/YmB7Nc+d?= =?us-ascii?Q?FtvO/taEr/37BAzHve/RI2e/nY9n9r7VTb9rg6MIva/sZxoH2KZvq5hcv21+?= =?us-ascii?Q?wPY/F6rovXvJLOKu8e7LObjslotBhL/jfd8qTYPXvfqaxO/voukxoMeqJ5Rx?= =?us-ascii?Q?3vIRM6URN+c4dRm+UaOsWfGG61A9bhe2nFb5xI3ilWoJMu0FDcMiMaC6t9uE?= =?us-ascii?Q?/chm/T3cnvz2oMWBtE30BYI82+l8ip3xLI3PTPRmexVQ1KHZvpmm5hWySP6o?= =?us-ascii?Q?jSo5jIBXfCDqY1X81PCMvtvzOYuiRlJskjN8Dfz3S53k8BBaUqaNq+sfvZld?= =?us-ascii?Q?mvBMZWvZZmFwRN7kmJrYUCiOA8tlREfYuG5rVEFjkQJVIzVyveXoJF4diFZY?= =?us-ascii?Q?uQGC8ZiUQDqs/jbzBmKckWGpNwkvsfsGlge/00TWmnvPnYfCl7+i7BpZ2c5E?= =?us-ascii?Q?2pKSkEBNl6ExgWO6u0XiH41iJMUwZB2bN35x7ltdMo2UoPl5cvXWMa6HVC2K?= =?us-ascii?Q?PGZEwlW7eGMX/h3GRmZGb1yXLh98jwyuRw685WCFFScVsh+YJnuk7sl9fcet?= =?us-ascii?Q?SD7gzhQdlqB+izWOJBCV83OqmoAlbqJA9suyTCpVwgultb45T4fW+y5QDnZS?= =?us-ascii?Q?NirBNpRKK/v2+WsAFnOBNw/IiFlzV29HPrcB0fAGt/plx083+JTh0WSF+eKv?= =?us-ascii?Q?JY8TwMETXRgBBunuFs20yqu3xzybCizhlhdPi4KzawzhFgIu9Dg4BzR/7OPc?= =?us-ascii?Q?iSnaLKydzowdutk7FVeyy2R5prGFGkSHHYLvOqwnhCDtrpYMCWV7/RnNcnA3?= =?us-ascii?Q?ap/Q/8Jg+dba2WGgEqIa8QZyUZzZLEqPzkSR5H1NbQ9HduV7MW2Nfp3DtXKL?= =?us-ascii?Q?2SAEs2IxyLD9naZXYDsVPBmiRIkEdhqPutouUw0OrKpy/Hl0fx+ZunPAMI8a?= =?us-ascii?Q?A3X1SMcDXBNcxUOAnSwyDlV7+OZ1ckpmvhYWqo+vZxREcWgVfdxRH6KeuImR?= =?us-ascii?Q?3xv7CI5+yKTM9lZ59K0c8lbxlHVX2/dpE+lWsn8Y8ZHPLrecD8upb6JkG8m2?= =?us-ascii?Q?xQgRiAo1kgnxca5EBYpdLQ00kOzS2j8GNu1/+uF/TRRpni5ssYeObLHb2eB3?= =?us-ascii?Q?iR83RprE+ZZbB+FJb7B9OxoHYWLS7crA/9+Yav9vK1vsAEBDQXiiy5R90iLm?= =?us-ascii?Q?/Ndu4fl3AG5tdyz0ez2ji/5AAp9+V+pBxcdSBIMSv9PikOe4GH0NghDkfGz7?= =?us-ascii?Q?AbKNXImPPg/oFo2KMPsfiuX028i9KIHTxoKeaBnSMPUK?= X-OriginatorOrg: sraoss.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 71276345-db31-4fc3-74aa-08dd39cbd58c X-MS-Exchange-CrossTenant-AuthSource: TYBP286MB0111.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jan 2025 03:29:38.1930 (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: 1jhrDew9+Q4g0ZTea7Kk9peIvxP+bTE2ShLAsj2x5nsnb16pJFfL+4I8/jWPNdjV5NIiqCO8jP0ulDcXxsBpCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5418 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Multipart=_Tue__21_Jan_2025_12_29_37_+0900_sBPyJl9O2wESf/lf Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, When an extension module is updated, first the new binary is installed, then ALTER EXTENSION UPDATE is executed to create or modify SQL objects. Between these two steps, users could see an error, or in worst case segfalut, during a query execution due to the lack or incompatibility of SQL objects. This might be avoidable if the binary is made carefully to check the existing of objects, but I think it is useful if an extension module function can check the current extension version. So, I would like to propose a new function to return the current extension version, get_extension_version. I've attached a patch. Also, as an application of this function, how about allowing to include versions in the "requires" list in the control file? It seems useful when an extension requires other extension with a certain version. The proposed get_extension_version can be used to check the versions of existing extensions. This is just an idea and a patch is not created yet. Regards, Yugo Nagata -- Yugo Nagata --Multipart=_Tue__21_Jan_2025_12_29_37_+0900_sBPyJl9O2wESf/lf Content-Type: text/x-diff; name="get_extension_version.patch" Content-Disposition: attachment; filename="get_extension_version.patch" Content-Transfer-Encoding: 7bit diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index ba540e3de5..48c9109c31 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -215,6 +215,28 @@ get_extension_schema(Oid ext_oid) return result; } +/* + * get_extension_version - given an extension OID, look up the version + * + * Returns a palloc'd string, or NULL if no such extension. + */ +char * +get_extension_version(Oid ext_oid) +{ + char *result; + HeapTuple tuple; + + tuple = SearchSysCache1(EXTENSIONOID, ObjectIdGetDatum(ext_oid)); + + if (!HeapTupleIsValid(tuple)) + return NULL; + + result = pstrdup(NameStr(((Form_pg_extension) GETSTRUCT(tuple))->extversion)); + ReleaseSysCache(tuple); + + return result; +} + /* * Utility functions to check validity of extension and version names */ diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h index 0b63640512..43a55adea7 100644 --- a/src/include/commands/extension.h +++ b/src/include/commands/extension.h @@ -48,6 +48,7 @@ extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt * extern Oid get_extension_oid(const char *extname, bool missing_ok); extern char *get_extension_name(Oid ext_oid); extern Oid get_extension_schema(Oid ext_oid); +extern char *get_extension_version(Oid ext_oid); extern bool extension_file_exists(const char *extensionName); extern ObjectAddress AlterExtensionNamespace(const char *extensionName, const char *newschema, --Multipart=_Tue__21_Jan_2025_12_29_37_+0900_sBPyJl9O2wESf/lf--