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

Commit54b4b68

Browse files
author
Vladimir Ershov
committed
read schema from catalog
1 parentf2b4c3d commit54b4b68

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

‎src/pgpro_scheduler.c

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
#include"utils/builtins.h"
2424
#include"catalog/pg_db_role_setting.h"
2525
#include"commands/dbcommands.h"
26+
#include"utils/lsyscache.h"
27+
#include"catalog/pg_extension.h"
28+
#include"catalog/indexing.h"
29+
#include"commands/extension.h"
30+
#include"access/sysattr.h"
31+
#include"access/htup_details.h"
32+
#include"utils/fmgroids.h"
2633

2734

2835
#include"char_array.h"
@@ -52,6 +59,7 @@ bool scheduler_service_enabled = false;
5259
char*scheduler_schema=NULL;
5360
/* Custom GUC done */
5461

62+
Oidscheduler_schema_oid=InvalidOid;
5563
Oidscheduler_atjob_id_OID=InvalidOid;
5664

5765
externvoid
@@ -166,11 +174,59 @@ bool is_scheduler_enabled(void)
166174
return false;
167175
}
168176

177+
char*get_scheduler_schema_name(void)
178+
{
179+
Oidns_oid;
180+
Oidext_oid;
181+
182+
Relationrel;
183+
SysScanDescscandesc;
184+
HeapTupletuple;
185+
ScanKeyDataentry[1];
186+
LOCKMODEheap_lock=AccessShareLock;
187+
188+
189+
if(scheduler_schema_oid==InvalidOid)
190+
{
191+
if (!IsTransactionState())
192+
elog(ERROR,"pgpro_scheduler: cannot get extension scheme (1)");
193+
ext_oid=get_extension_oid("pgpro_scheduler", true);
194+
if(ext_oid==InvalidOid)
195+
elog(ERROR,"pgpro_scheduler: cannot get extension id");
196+
197+
ScanKeyInit(&entry[0],
198+
ObjectIdAttributeNumber,
199+
BTEqualStrategyNumber,
200+
F_OIDEQ,
201+
ObjectIdGetDatum(ext_oid));
202+
rel=heap_open(ExtensionRelationId,heap_lock);
203+
scandesc=systable_beginscan(rel,ExtensionOidIndexId, true,
204+
NULL,1,entry);
205+
tuple=systable_getnext(scandesc);
206+
if (HeapTupleIsValid(tuple))
207+
ns_oid= ((Form_pg_extension)GETSTRUCT(tuple))->extnamespace;
208+
else
209+
ns_oid=InvalidOid;
210+
systable_endscan(scandesc);
211+
heap_close(rel,heap_lock);
212+
213+
if(ns_oid==InvalidOid)
214+
elog(ERROR,"pgpro_scheduler: cannot get extension schema oid");
215+
216+
scheduler_schema_oid=ns_oid;
217+
}
218+
else
219+
{
220+
ns_oid=scheduler_schema_oid;
221+
}
222+
223+
returnget_namespace_name(ns_oid);
224+
}
225+
169226
char*set_schema(constchar*name,boolget_old)
170227
{
171228
char*schema_name=NULL;
172229
char*current=NULL;
173-
boolfree_name= false;
174230

175231
if(get_old)
176232
current=_mcopy_string(NULL, (char*)GetConfigOption("search_path", true, false));
@@ -180,11 +236,9 @@ char *set_schema(const char *name, bool get_old)
180236
}
181237
else
182238
{
183-
schema_name=_mcopy_string(NULL, (char*)GetConfigOption("schedule.schema", true, false));
184-
free_name= true;
239+
schema_name=get_scheduler_schema_name();
185240
}
186241
SetConfigOption("search_path",schema_name,PGC_USERSET,PGC_S_SESSION);
187-
if(free_name)pfree(schema_name);
188242

189243
returncurrent;
190244
}

‎src/pgpro_scheduler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@ TimestampTz get_timestamp_from_string(char *str);
4141
TimestampTz_round_timestamp_to_minute(TimestampTzts);
4242
boolis_scheduler_enabled(void);
4343
char*set_schema(constchar*name,boolget_old);
44+
char*get_scheduler_schema_name(void);
4445

4546
#endif

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp