PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ _PG_init()

void _PG_init ( void  )

Definition at line 421 of file rtpostgis.c.

References boot_postgis_gdal_enabled_drivers, enable_outdb_rasters, env_postgis_enable_outdb_rasters, env_postgis_gdal_enabled_drivers, gdal_datapath, GDAL_DISABLE_ALL, gdal_enabled_drivers, POSTGIS_PGSQL_VERSION, POSTGIS_RT_DEBUGF, rt_pg_alloc(), rt_pg_debug(), rt_pg_error(), rt_pg_free(), rt_pg_notice(), rt_pg_realloc(), rt_set_handlers(), rtpg_assignHookEnableOutDBRasters(), rtpg_assignHookGDALDataPath(), rtpg_assignHookGDALEnabledDrivers(), and rtpg_trim().

421  {
422 
423  bool boot_postgis_enable_outdb_rasters = false;
424  MemoryContext old_context;
425 
426  /*
427  * Change to context for memory allocation calls like palloc() in the
428  * extension initialization routine
429  */
430  old_context = MemoryContextSwitchTo(TopMemoryContext);
431 
432  /*
433  use POSTGIS_GDAL_ENABLED_DRIVERS to set the bootValue
434  of GUC postgis.gdal_enabled_drivers
435  */
436  env_postgis_gdal_enabled_drivers = getenv("POSTGIS_GDAL_ENABLED_DRIVERS");
437  if (env_postgis_gdal_enabled_drivers == NULL) {
439  sizeof(char) * (strlen(GDAL_DISABLE_ALL) + 1)
440  );
442  }
443  else {
446  );
447  }
449  4,
450  "boot_postgis_gdal_enabled_drivers = %s",
452  );
453 
454  /*
455  use POSTGIS_ENABLE_OUTDB_RASTERS to set the bootValue
456  of GUC postgis.enable_outdb_rasters
457  */
458  env_postgis_enable_outdb_rasters = getenv("POSTGIS_ENABLE_OUTDB_RASTERS");
459  if (env_postgis_enable_outdb_rasters != NULL) {
461 
462  /* out of memory */
463  if (env == NULL) {
464  elog(ERROR, "_PG_init: Cannot process environmental variable: POSTGIS_ENABLE_OUTDB_RASTERS");
465  return;
466  }
467 
468  if (strcmp(env, "1") == 0)
469  boot_postgis_enable_outdb_rasters = true;
470 
471  pfree(env);
472  }
474  4,
475  "boot_postgis_enable_outdb_rasters = %s",
476  boot_postgis_enable_outdb_rasters ? "TRUE" : "FALSE"
477  );
478 
479  /* Install liblwgeom handlers */
480  pg_install_lwgeom_handlers();
481 
482  /* Install rtcore handlers */
484 
485  /* Define custom GUC variables. */
486  if ( postgis_guc_find_option("postgis.gdal_datapath") )
487  {
488  /* In this narrow case the previously installed GUC is tied to the callback in */
489  /* the previously loaded library. Probably this is happening during an */
490  /* upgrade, so the old library is where the callback ties to. */
491  elog(WARNING, "'%s' is already set and cannot be changed until you reconnect", "postgis.gdal_datapath");
492  }
493  else
494  {
495  DefineCustomStringVariable(
496  "postgis.gdal_datapath", /* name */
497  "Path to GDAL data files.", /* short_desc */
498  "Physical path to directory containing GDAL data files (sets the GDAL_DATA config option).", /* long_desc */
499  &gdal_datapath, /* valueAddr */
500  NULL, /* bootValue */
501  PGC_SUSET, /* GucContext context */
502  0, /* int flags */
503 #if POSTGIS_PGSQL_VERSION >= 91
504  NULL, /* GucStringCheckHook check_hook */
505 #endif
506  rtpg_assignHookGDALDataPath, /* GucStringAssignHook assign_hook */
507  NULL /* GucShowHook show_hook */
508  );
509  }
510 
511  if ( postgis_guc_find_option("postgis.gdal_enabled_drivers") )
512  {
513  /* In this narrow case the previously installed GUC is tied to the callback in */
514  /* the previously loaded library. Probably this is happening during an */
515  /* upgrade, so the old library is where the callback ties to. */
516  elog(WARNING, "'%s' is already set and cannot be changed until you reconnect", "postgis.gdal_enabled_drivers");
517  }
518  else
519  {
520  DefineCustomStringVariable(
521  "postgis.gdal_enabled_drivers", /* name */
522  "Enabled GDAL drivers.", /* short_desc */
523  "List of enabled GDAL drivers by short name. To enable/disable all drivers, use 'ENABLE_ALL' or 'DISABLE_ALL' (sets the GDAL_SKIP config option).", /* long_desc */
524  &gdal_enabled_drivers, /* valueAddr */
525  boot_postgis_gdal_enabled_drivers, /* bootValue */
526  PGC_SUSET, /* GucContext context */
527  0, /* int flags */
528 #if POSTGIS_PGSQL_VERSION >= 91
529  NULL, /* GucStringCheckHook check_hook */
530 #endif
531  rtpg_assignHookGDALEnabledDrivers, /* GucStringAssignHook assign_hook */
532  NULL /* GucShowHook show_hook */
533  );
534  }
535 
536  if ( postgis_guc_find_option("postgis.enable_outdb_rasters") )
537  {
538  /* In this narrow case the previously installed GUC is tied to the callback in */
539  /* the previously loaded library. Probably this is happening during an */
540  /* upgrade, so the old library is where the callback ties to. */
541  elog(WARNING, "'%s' is already set and cannot be changed until you reconnect", "postgis.enable_outdb_rasters");
542  }
543  else
544  {
545  DefineCustomBoolVariable(
546  "postgis.enable_outdb_rasters", /* name */
547  "Enable Out-DB raster bands", /* short_desc */
548  "If true, rasters can access data located outside the database", /* long_desc */
549  &enable_outdb_rasters, /* valueAddr */
550  boot_postgis_enable_outdb_rasters, /* bootValue */
551  PGC_SUSET, /* GucContext context */
552  0, /* int flags */
553 #if POSTGIS_PGSQL_VERSION >= 91
554  NULL, /* GucStringCheckHook check_hook */
555 #endif
556  rtpg_assignHookEnableOutDBRasters, /* GucBoolAssignHook assign_hook */
557  NULL /* GucShowHook show_hook */
558  );
559  }
560 
561  /* Revert back to old context */
562  MemoryContextSwitchTo(old_context);
563 }
static void rtpg_assignHookGDALEnabledDrivers(const char *enabled_drivers, void *extra)
Definition: rtpostgis.c:278
void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator, rt_deallocator deallocator, rt_message_handler error_handler, rt_message_handler info_handler, rt_message_handler warning_handler)
This function is called when the PostgreSQL backend is taking care of the memory and we want to use p...
Definition: rt_context.c:151
static void rt_pg_notice(const char *fmt, va_list ap) __attribute__((format(printf
Definition: rtpostgis.c:218
static char * env_postgis_gdal_enabled_drivers
Definition: rtpostgis.c:255
char enable_outdb_rasters
Definition: rt_band.c:319
#define GDAL_DISABLE_ALL
Definition: librtcore.h:2012
static char * env_postgis_enable_outdb_rasters
Definition: rtpostgis.c:257
#define POSTGIS_RT_DEBUGF(level, msg,...)
Definition: rtpostgis.h:57
static void rtpg_assignHookEnableOutDBRasters(bool enable, void *extra)
Definition: rtpostgis.c:415
char * gdal_enabled_drivers
Definition: rt_util.c:373
static char * boot_postgis_gdal_enabled_drivers
Definition: rtpostgis.c:256
static char * gdal_datapath
Definition: rtpostgis.c:247
#define POSTGIS_PGSQL_VERSION
Definition: sqldefines.h:9
char * rtpg_trim(const char *input)
static void rt_pg_error(const char *fmt, va_list ap) __attribute__((format(printf
Definition: rtpostgis.c:204
static void rt_pg_free(void *ptr)
Definition: rtpostgis.c:194
static void rt_pg_debug(const char *fmt, va_list ap) __attribute__((format(printf
Definition: rtpostgis.c:232
static void * rt_pg_alloc(size_t size)
Definition: rtpostgis.c:166
static void rtpg_assignHookGDALDataPath(const char *newpath, void *extra)
Definition: rtpostgis.c:261
static void * rt_pg_realloc(void *mem, size_t size)
Definition: rtpostgis.c:178
Here is the call graph for this function: