@@ -60,6 +60,7 @@ PlannedStmt *sr_planner(Query *parse,
6060 bool find_ok = false;
6161 LOCKMODE heap_lock = AccessShareLock ;
6262 Oid query_index_rel_oid ;
63+ Oid sr_plans_oid ;
6364 IndexScanDesc query_index_scan ;
6465 ScanKeyData key ;
6566
@@ -81,11 +82,19 @@ PlannedStmt *sr_planner(Query *parse,
8182 sr_query_walker ((Query * )parse , NULL );
8283
8384 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 );
8593
8694 query_index_rel_oid = DatumGetObjectId (DirectFunctionCall1 (to_regclass , PointerGetDatum (cstring_to_text ("sr_plans_query_hash_idx" ))));
8795 if (query_index_rel_oid == InvalidOid )
8896 {
97+ heap_close (sr_plans_heap , heap_lock );
8998 elog (WARNING , "Not found sr_plans_query_hash_idx index" );
9099 return standard_planner (parse , cursorOptions , boundParams );
91100 }
0 commit comments