6464#include "utils/memutils.h"
6565#include "utils/rel.h"
6666#include "utils/snapmgr.h"
67+ #include "utils/syscache.h"
6768#include "utils/varlena.h"
6869
6970
145146get_extension_oid (const char * extname , bool missing_ok )
146147{
147148 Oid result ;
148- Relation rel ;
149- SysScanDesc scandesc ;
150- HeapTuple tuple ;
151- ScanKeyData entry [1 ];
152-
153- rel = table_open (ExtensionRelationId , AccessShareLock );
154-
155- ScanKeyInit (& entry [0 ],
156- Anum_pg_extension_extname ,
157- BTEqualStrategyNumber , F_NAMEEQ ,
158- CStringGetDatum (extname ));
159149
160- scandesc = systable_beginscan (rel , ExtensionNameIndexId , true,
161- NULL , 1 , entry );
162-
163- tuple = systable_getnext (scandesc );
164-
165- /* We assume that there can be at most one matching tuple */
166- if (HeapTupleIsValid (tuple ))
167- result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> oid ;
168- else
169- result = InvalidOid ;
170-
171- systable_endscan (scandesc );
172-
173- table_close (rel , AccessShareLock );
150+ result = GetSysCacheOid1 (EXTENSIONNAME , Anum_pg_extension_oid ,
151+ CStringGetDatum (extname ));
174152
175153 if (!OidIsValid (result ) && !missing_ok )
176154 ereport (ERROR ,
@@ -190,32 +168,15 @@ char *
190168get_extension_name (Oid ext_oid )
191169{
192170 char * result ;
193- Relation rel ;
194- SysScanDesc scandesc ;
195171 HeapTuple tuple ;
196- ScanKeyData entry [1 ];
197172
198- rel = table_open ( ExtensionRelationId , AccessShareLock );
173+ tuple = SearchSysCache1 ( EXTENSIONOID , ObjectIdGetDatum ( ext_oid ) );
199174
200- ScanKeyInit (& entry [0 ],
201- Anum_pg_extension_oid ,
202- BTEqualStrategyNumber , F_OIDEQ ,
203- ObjectIdGetDatum (ext_oid ));
175+ if (!HeapTupleIsValid (tuple ))
176+ return NULL ;
204177
205- scandesc = systable_beginscan (rel , ExtensionOidIndexId , true,
206- NULL , 1 , entry );
207-
208- tuple = systable_getnext (scandesc );
209-
210- /* We assume that there can be at most one matching tuple */
211- if (HeapTupleIsValid (tuple ))
212- result = pstrdup (NameStr (((Form_pg_extension ) GETSTRUCT (tuple ))-> extname ));
213- else
214- result = NULL ;
215-
216- systable_endscan (scandesc );
217-
218- table_close (rel , AccessShareLock );
178+ result = pstrdup (NameStr (((Form_pg_extension ) GETSTRUCT (tuple ))-> extname ));
179+ ReleaseSysCache (tuple );
219180
220181 return result ;
221182}
@@ -229,32 +190,15 @@ Oid
229190get_extension_schema (Oid ext_oid )
230191{
231192 Oid result ;
232- Relation rel ;
233- SysScanDesc scandesc ;
234193 HeapTuple tuple ;
235- ScanKeyData entry [1 ];
236-
237- rel = table_open (ExtensionRelationId , AccessShareLock );
238194
239- ScanKeyInit (& entry [0 ],
240- Anum_pg_extension_oid ,
241- BTEqualStrategyNumber , F_OIDEQ ,
242- ObjectIdGetDatum (ext_oid ));
195+ tuple = SearchSysCache1 (EXTENSIONOID , ObjectIdGetDatum (ext_oid ));
243196
244- scandesc = systable_beginscan (rel , ExtensionOidIndexId , true,
245- NULL , 1 , entry );
246-
247- tuple = systable_getnext (scandesc );
248-
249- /* We assume that there can be at most one matching tuple */
250- if (HeapTupleIsValid (tuple ))
251- result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> extnamespace ;
252- else
253- result = InvalidOid ;
254-
255- systable_endscan (scandesc );
197+ if (!HeapTupleIsValid (tuple ))
198+ return InvalidOid ;
256199
257- table_close (rel , AccessShareLock );
200+ result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> extnamespace ;
201+ ReleaseSysCache (tuple );
258202
259203 return result ;
260204}
0 commit comments