Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit88a0fc2

Browse files
michaelpqpull[bot]
authored andcommitted
Update extension lookup routines to use the syscache
The following routines are changed to use the syscache entries added forpg_extension in490f869:- get_extension_oid()- get_extension_name()- get_extension_schema()A catalog scan is costly and could easily lead to a noticeableperformance impact when called once or more per query, so this is goingto be helpful for developers for extension data lookups.Author: Andrei LepikhovReviewed-by: Jelte Fennema-NioDiscussion:https://postgr.es/m/529295b2-6ba9-4dae-acd1-20a9c6fb8f9a@gmail.com
1 parent90c2f57 commit88a0fc2

File tree

1 file changed

+13
-69
lines changed

1 file changed

+13
-69
lines changed

‎src/backend/commands/extension.c

Lines changed: 13 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
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

@@ -145,32 +146,9 @@ Oid
145146
get_extension_oid(constchar*extname,boolmissing_ok)
146147
{
147148
Oidresult;
148-
Relationrel;
149-
SysScanDescscandesc;
150-
HeapTupletuple;
151-
ScanKeyDataentry[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 *
190168
get_extension_name(Oidext_oid)
191169
{
192170
char*result;
193-
Relationrel;
194-
SysScanDescscandesc;
195171
HeapTupletuple;
196-
ScanKeyDataentry[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+
returnNULL;
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
returnresult;
221182
}
@@ -229,32 +190,15 @@ Oid
229190
get_extension_schema(Oidext_oid)
230191
{
231192
Oidresult;
232-
Relationrel;
233-
SysScanDescscandesc;
234193
HeapTupletuple;
235-
ScanKeyDataentry[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+
returnInvalidOid;
256199

257-
table_close(rel,AccessShareLock);
200+
result= ((Form_pg_extension)GETSTRUCT(tuple))->extnamespace;
201+
ReleaseSysCache(tuple);
258202

259203
returnresult;
260204
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp