@@ -60,6 +60,7 @@ PlannedStmt *sr_planner(Query *parse,
60
60
bool find_ok = false;
61
61
LOCKMODE heap_lock = AccessShareLock ;
62
62
Oid query_index_rel_oid ;
63
+ Oid sr_plans_oid ;
63
64
IndexScanDesc query_index_scan ;
64
65
ScanKeyData key ;
65
66
@@ -81,7 +82,14 @@ PlannedStmt *sr_planner(Query *parse,
81
82
sr_query_walker ((Query * )parse , NULL );
82
83
83
84
sr_plans_table_rv = makeRangeVar ("public" , "sr_plans" , -1 );
84
- sr_plans_heap = heap_openrv (sr_plans_table_rv , heap_lock );
85
+ /* First check existance of "sr_plans" table */
86
+ sr_plans_oid = RangeVarGetRelid (sr_plans_table_rv , heap_lock , true);
87
+ if (!OidIsValid (sr_plans_oid ))
88
+ /* Just call standard_planner() if table doesn't exist. */
89
+ return standard_planner (parse , cursorOptions , boundParams );
90
+
91
+ /* Table "sr_plans" exists */
92
+ sr_plans_heap = heap_open (sr_plans_oid , NoLock );
85
93
86
94
#if PG_VERSION_NUM >= 90600
87
95
query_index_rel_oid = DatumGetObjectId (DirectFunctionCall1 (to_regclass , PointerGetDatum (cstring_to_text ("sr_plans_query_hash_idx" ))));
@@ -90,6 +98,7 @@ PlannedStmt *sr_planner(Query *parse,
90
98
#endif
91
99
if (query_index_rel_oid == InvalidOid )
92
100
{
101
+ heap_close (sr_plans_heap , heap_lock );
93
102
elog (WARNING , "Not found sr_plans_query_hash_idx index" );
94
103
return standard_planner (parse , cursorOptions , boundParams );
95
104
}
0 commit comments