mlw, would you modify this to use the config_path idea we agreed upon so we can get this into 7.4?
--------------------------------------------------------------------------- mlw wrote: > This is a patch that allows PostgreSQL to use a configuration > file that is outside the main database directory. > > It adds one more command line parameter, "-C" which > specifies either the location of the postgres configuration > file or a directory containing the configuration files. > > A patched version of PostgreSQL will function as: > > --- Configuration file --- > postmaster -C /etc/postgres/postgresql.conf > > This will direct the postmaster program to use the > configuration file "/etc/postgres/postgresql.conf" > > --- Configuration Directory --- > postmaster -C /etc/postgres > > This will direct the postmaster program to search the > directory "/etc/postgres" for the standard configuration > file names: posgresql.conf, pg_hba.conf, and pg_ident.conf. > > --- postgresql.conf --- > Within the main configuration file are four additional > parameters: include, hba_conf,ident_conf, and data_dir. > > They are used as: > include = '/etc/postgres/debug.conf' > data_dir = '/vol01/postgres' > hba_conf = '/etc/postgres/pg_hba_conf' > ident_conf = '/etc/postgres/pg_ident.conf' > > > The "-D" option on the command line overrides the "data_dir" > in the configuration file. > > If no hba_conf and/or ident_conf setting is specified, the default > $PGDATA/pg_hba.conf and/or $PGDATA/pg_ident.conf will be used. > > This patch is intended to move the PostgreSQL configuration out of the > data directory so that it can be modified and backed up. > > This patch is also useful for running multiple servers with the same > parameters: > > postmaster -C /etc/postgres/postgresql.conf -D /VOL01/postgres -p 5432 > postmaster -C /etc/postgres/postgresql.conf -D /VOL02/postgres -p 5433 > > To apply the patch, enter your PostreSQL source directory, and run: > > cat pgec-PGVERSON.patch | patch -p 1 > > diff -u -r postgresql-7.3.2/src/backend/libpq/hba.c > postgresql-7.3.2.ec/src/backend/libpq/hba.c > --- postgresql-7.3.2/src/backend/libpq/hba.c Sat Dec 14 13:49:43 2002 > +++ postgresql-7.3.2.ec/src/backend/libpq/hba.c Mon Feb 17 14:57:37 2003 > @@ -35,6 +35,7 @@ > #include "miscadmin.h" > #include "nodes/pg_list.h" > #include "storage/fd.h" > +#include "utils/guc.h" > > > #define IDENT_USERNAME_MAX 512 > @@ -837,10 +838,22 @@ > if (hba_lines) > free_lines(&hba_lines); > > - /* Put together the full pathname to the config file. */ > - bufsize = (strlen(DataDir) + strlen(CONF_FILE) + 2) * sizeof(char); > - conf_file = (char *) palloc(bufsize); > - snprintf(conf_file, bufsize, "%s/%s", DataDir, CONF_FILE); > + /* Explicit HBA in config file */ > + if(explicit_hbafile && strlen(explicit_hbafile)) > + { > + bufsize = strlen(explicit_hbafile)+1; > + conf_file = (char *) palloc(bufsize); > + strcpy(conf_file, explicit_hbafile); > + } > + else > + { > + char *confloc = (explicit_isdir) ? explicit_pgconfig : DataDir; > + /* put together the full pathname to the config file */ > + bufsize = (strlen(confloc) + strlen(CONF_FILE) + 2) * sizeof(char); > + conf_file = (char *) palloc(bufsize); > + snprintf(conf_file, bufsize, "%s/%s", confloc, CONF_FILE); > + } > + /* printf("hba_conf: %s\n", conf_file); */ > > file = AllocateFile(conf_file, "r"); > if (file == NULL) > @@ -979,10 +992,22 @@ > if (ident_lines) > free_lines(&ident_lines); > > - /* put together the full pathname to the map file */ > - bufsize = (strlen(DataDir) + strlen(USERMAP_FILE) + 2) * sizeof(char); > - map_file = (char *) palloc(bufsize); > - snprintf(map_file, bufsize, "%s/%s", DataDir, USERMAP_FILE); > + /* Explicit IDENT in config file */ > + if(explicit_identfile && strlen(explicit_identfile)) > + { > + bufsize = strlen(explicit_identfile)+1; > + map_file = (char *) palloc(bufsize); > + strcpy(map_file, explicit_identfile); > + } > + else > + { > + /* put together the full pathname to the map file */ > + char *confloc = (explicit_isdir) ? explicit_pgconfig : DataDir; > + bufsize = (strlen(confloc) + strlen(USERMAP_FILE) + 2) * sizeof(char); > + map_file = (char *) palloc(bufsize); > + snprintf(map_file, bufsize, "%s/%s", confloc, USERMAP_FILE); > + } > + /* printf("ident_conf: %s\n", map_file); */ > > file = AllocateFile(map_file, "r"); > if (file == NULL) > diff -u -r postgresql-7.3.2/src/backend/postmaster/postmaster.c > postgresql-7.3.2.ec/src/backend/postmaster/postmaster.c > --- postgresql-7.3.2/src/backend/postmaster/postmaster.c Wed Jan 15 19:27:17 > 2003 > +++ postgresql-7.3.2.ec/src/backend/postmaster/postmaster.c Mon Feb 17 12:14:12 > 2003 > @@ -421,7 +421,7 @@ > > opterr = 1; > > - while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1) > + while ((opt = getopt(argc, argv, "A:a:B:b:C:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != > -1) > { > switch (opt) > { > @@ -441,6 +441,9 @@ > case 'b': > /* Can no longer set the backend executable file to > use. */ > break; > + case 'C': // MLW > + explicit_pgconfig = optarg; > + break; > case 'D': > potential_DataDir = optarg; > break; > @@ -564,13 +567,23 @@ > ExitPostmaster(1); > } > > - /* > - * Now we can set the data directory, and then read postgresql.conf. > - */ > - checkDataDir(potential_DataDir); /* issues error messages */ > - SetDataDir(potential_DataDir); > - > - ProcessConfigFile(PGC_POSTMASTER); > + if(explicit_pgconfig) > + { > + ProcessConfigFile(PGC_POSTMASTER); > + if(!potential_DataDir && pgdatadir) > + potential_DataDir = pgdatadir; > + checkDataDir(potential_DataDir); /* issues error messages */ > + SetDataDir(potential_DataDir); > + } > + else > + { > + /* > + * Now we can set the data directory, and then read postgresql.conf. > + */ > + checkDataDir(potential_DataDir); /* issues error messages */ > + SetDataDir(potential_DataDir); > + ProcessConfigFile(PGC_POSTMASTER); > + } > > /* > * Check for invalid combinations of GUC settings. > diff -u -r postgresql-7.3.2/src/backend/utils/misc/guc-file.c > postgresql-7.3.2.ec/src/backend/utils/misc/guc-file.c > --- postgresql-7.3.2/src/backend/utils/misc/guc-file.c Mon Feb 3 15:22:34 > 2003 > +++ postgresql-7.3.2.ec/src/backend/utils/misc/guc-file.c Mon Feb 17 14:58:11 > 2003 > @@ -2,7 +2,6 @@ > > /* Scanner skeleton version: > * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp > $ > - * $FreeBSD: src/usr.bin/lex/flex.skl,v 1.4 1999/10/27 07:56:44 obrien Exp $ > */ > > #define FLEX_SCANNER > @@ -10,6 +9,7 @@ > #define YY_FLEX_MINOR_VERSION 5 > > #include <stdio.h> > +#include <unistd.h> > > > /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ > @@ -23,7 +23,6 @@ > #ifdef __cplusplus > > #include <stdlib.h> > -#include <unistd.h> > > /* Use prototypes in function declarations. */ > #define YY_USE_PROTOS > @@ -443,7 +442,7 @@ > char *GUC_scanstr(char *); > #define YY_NEVER_INTERACTIVE 1 > #define YY_NO_UNPUT 1 > -#line 447 "lex.GUC_yy.c" > +#line 446 "lex.GUC_yy.c" > > /* Macros after this point can all be overridden by user definitions in > * section 1. > @@ -591,13 +590,13 @@ > YY_DECL > { > register GUC_yy_state_type GUC_yy_current_state; > - register char *GUC_yy_cp, *GUC_yy_bp; > + register char *GUC_yy_cp = NULL, *GUC_yy_bp = NULL; > register int GUC_yy_act; > > #line 71 "guc-file.l" > > > -#line 601 "lex.GUC_yy.c" > +#line 600 "lex.GUC_yy.c" > > if ( GUC_yy_init ) > { > @@ -738,7 +737,7 @@ > #line 86 "guc-file.l" > ECHO; > YY_BREAK > -#line 742 "lex.GUC_yy.c" > +#line 741 "lex.GUC_yy.c" > case YY_STATE_EOF(INITIAL): > GUC_yyterminate(); > > @@ -1302,11 +1301,6 @@ > } > > > -#ifndef YY_ALWAYS_INTERACTIVE > -#ifndef YY_NEVER_INTERACTIVE > -extern int isatty YY_PROTO(( int )); > -#endif > -#endif > > #ifdef YY_USE_PROTOS > void GUC_yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) > @@ -1658,51 +1652,27 @@ > } > } > > +#define ELEVEL_FROM_CONTEXT(ctx) (ctx == PGC_SIGHUP) ? DEBUG3 : ERROR > > -/* > - * Official function to read and process the configuration file. The > - * parameter indicates in what context the file is being read > - * (postmaster startup, backend startup, or SIGHUP). All options > - * mentioned in the configuration file are set to new values. This > - * function does not return if an error occurs. If an error occurs, no > - * values will be changed. > - */ > -void > -ProcessConfigFile(GucContext context) > +static void > +ReadConfigFile(char *filename, GucContext context) > { > int token, parse_state; > char *opt_name, *opt_value; > - char *filename; > struct name_value_pair *item, *head, *tail; > - int elevel; > - FILE * fp; > - > - Assert(context == PGC_POSTMASTER || context == PGC_BACKEND > - || context == PGC_SIGHUP); > - Assert(DataDir); > - elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + FILE *fp; > + int elevel = ELEVEL_FROM_CONTEXT(context); > > - /* > - * Open file > - */ > - filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); > - if (filename == NULL) > - { > - elog(elevel, "out of memory"); > - return; > - } > - sprintf(filename, "%s/" CONFIG_FILENAME, DataDir); > - > - fp = AllocateFile(filename, "r"); > - if (!fp) > - { > + fp = AllocateFile(filename, "r"); > + if (!fp) > + { > + /* File not found is fine */ > + if (errno != ENOENT) > + elog(elevel, "could not read configuration file %s: %s", > + filename, strerror(errno)); > free(filename); > - /* File not found is fine */ > - if (errno != ENOENT) > - elog(elevel, "could not read configuration file `" CONFIG_FILENAME "': > %s", strerror(errno)); > return; > - } > - > + } > /* > * Parse > */ > @@ -1731,7 +1701,8 @@ > token = GUC_yylex(); > > if (token != GUC_ID && token != GUC_STRING && > - token != GUC_INTEGER && token != GUC_REAL && > + token != GUC_INTEGER && > + token != GUC_REAL && > token != GUC_UNQUOTED_STRING) > goto parse_error; > opt_value = strdup(GUC_yytext); > @@ -1775,7 +1746,6 @@ > } > > FreeFile(fp); > - free(filename); > > /* > * Check if all options are valid > @@ -1798,7 +1768,6 @@ > > parse_error: > FreeFile(fp); > - free(filename); > free_name_value_list(head); > elog(elevel, CONFIG_FILENAME ":%u: syntax error, token=\"%s\"", > ConfigFileLineno,GUC_yytext); > @@ -1806,12 +1775,78 @@ > > out_of_memory: > FreeFile(fp); > - free(filename); > free_name_value_list(head); > elog(elevel, "out of memory"); > return; > } > +/* > + * Official function to read and process the configuration file. The > + * parameter indicates in what context the file is being read > + * (postmaster startup, backend startup, or SIGHUP). All options > + * mentioned in the configuration file are set to new values. This > + * function does not return if an error occurs. If an error occurs, no > + * values will be changed. > + */ > +void > +ProcessConfigFile(GucContext context) > +{ > + char *filename; > + > + Assert(context == PGC_POSTMASTER || context == PGC_BACKEND > + || context == PGC_SIGHUP); > > + /* Added for explicit config file */ > + if(explicit_pgconfig) > + { > + struct stat sb; > + > + if(stat(explicit_pgconfig, &sb)!=0) > + { > + int elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + elog(elevel, "Invalid configuration parameter"); > + return ; > + } > + > + > + if((sb.st_mode & S_IFDIR) == S_IFDIR) > + { > + /* This will cause a small one time memory leak > + * if the user also specifies hba_conf, > + * ident_conf, and data_dir > + */ > + filename = malloc(strlen(explicit_pgconfig) + > strlen(CONFIG_FILENAME) + 2); > + sprintf(filename, "%s/%s", explicit_pgconfig, CONFIG_FILENAME); > + explicit_isdir = true; > + } > + else > + { > + /* > + * Use explicit file > + */ > + filename = strdup(explicit_pgconfig); > + } > + } > + else > + { > + /* > + * Use environmental config > + */ > + filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); > + sprintf(filename, "%s/%s", DataDir, CONFIG_FILENAME); > + } > + > + if (filename == NULL) > + { > + int elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + elog(elevel, "out of memory"); > + return; > + } > + /* printf("Using: %s\n", filename); */ > + > + ReadConfigFile(filename, context); > + > + free(filename); > +} > > > /* ---------------- > diff -u -r postgresql-7.3.2/src/backend/utils/misc/guc-file.l > postgresql-7.3.2.ec/src/backend/utils/misc/guc-file.l > --- postgresql-7.3.2/src/backend/utils/misc/guc-file.l Tue Jul 30 12:33:08 > 2002 > +++ postgresql-7.3.2.ec/src/backend/utils/misc/guc-file.l Mon Feb 17 14:58:07 > 2003 > @@ -116,51 +116,27 @@ > } > } > > +#define ELEVEL_FROM_CONTEXT(ctx) (ctx == PGC_SIGHUP) ? DEBUG3 : ERROR > > -/* > - * Official function to read and process the configuration file. The > - * parameter indicates in what context the file is being read > - * (postmaster startup, backend startup, or SIGHUP). All options > - * mentioned in the configuration file are set to new values. This > - * function does not return if an error occurs. If an error occurs, no > - * values will be changed. > - */ > -void > -ProcessConfigFile(GucContext context) > +static void > +ReadConfigFile(char *filename, GucContext context) > { > int token, parse_state; > char *opt_name, *opt_value; > - char *filename; > struct name_value_pair *item, *head, *tail; > - int elevel; > - FILE * fp; > - > - Assert(context == PGC_POSTMASTER || context == PGC_BACKEND > - || context == PGC_SIGHUP); > - Assert(DataDir); > - elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + FILE *fp; > + int elevel = ELEVEL_FROM_CONTEXT(context); > > - /* > - * Open file > - */ > - filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); > - if (filename == NULL) > - { > - elog(elevel, "out of memory"); > - return; > - } > - sprintf(filename, "%s/" CONFIG_FILENAME, DataDir); > - > - fp = AllocateFile(filename, "r"); > - if (!fp) > - { > + fp = AllocateFile(filename, "r"); > + if (!fp) > + { > + /* File not found is fine */ > + if (errno != ENOENT) > + elog(elevel, "could not read configuration file %s: %s", > + filename, strerror(errno)); > free(filename); > - /* File not found is fine */ > - if (errno != ENOENT) > - elog(elevel, "could not read configuration file `" CONFIG_FILENAME "': > %s", strerror(errno)); > return; > - } > - > + } > /* > * Parse > */ > @@ -189,7 +165,8 @@ > token = yylex(); > > if (token != GUC_ID && token != GUC_STRING && > - token != GUC_INTEGER && token != GUC_REAL && > + token != GUC_INTEGER && > + token != GUC_REAL && > token != GUC_UNQUOTED_STRING) > goto parse_error; > opt_value = strdup(yytext); > @@ -233,7 +210,6 @@ > } > > FreeFile(fp); > - free(filename); > > /* > * Check if all options are valid > @@ -256,7 +232,6 @@ > > parse_error: > FreeFile(fp); > - free(filename); > free_name_value_list(head); > elog(elevel, CONFIG_FILENAME ":%u: syntax error, token=\"%s\"", > ConfigFileLineno,yytext); > @@ -264,12 +239,78 @@ > > out_of_memory: > FreeFile(fp); > - free(filename); > free_name_value_list(head); > elog(elevel, "out of memory"); > return; > } > +/* > + * Official function to read and process the configuration file. The > + * parameter indicates in what context the file is being read > + * (postmaster startup, backend startup, or SIGHUP). All options > + * mentioned in the configuration file are set to new values. This > + * function does not return if an error occurs. If an error occurs, no > + * values will be changed. > + */ > +void > +ProcessConfigFile(GucContext context) > +{ > + char *filename; > + > + Assert(context == PGC_POSTMASTER || context == PGC_BACKEND > + || context == PGC_SIGHUP); > + > + /* Added for explicit config file */ > + if(explicit_pgconfig) > + { > + struct stat sb; > + > + if(stat(explicit_pgconfig, &sb)!=0) > + { > + int elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + elog(elevel, "Invalid configuration parameter"); > + return ; > + } > + > + > + if((sb.st_mode & S_IFDIR) == S_IFDIR) > + { > + /* This will cause a small one time memory leak > + * if the user also specifies hba_conf, > + * ident_conf, and data_dir > + */ > + filename = malloc(strlen(explicit_pgconfig) + > strlen(CONFIG_FILENAME) + 2); > + sprintf(filename, "%s/%s", explicit_pgconfig, CONFIG_FILENAME); > + explicit_isdir = true; > + } > + else > + { > + /* > + * Use explicit file > + */ > + filename = strdup(explicit_pgconfig); > + } > + } > + else > + { > + /* > + * Use environmental config > + */ > + filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); > + sprintf(filename, "%s/%s", DataDir, CONFIG_FILENAME); > + } > + > + if (filename == NULL) > + { > + int elevel = (context == PGC_SIGHUP) ? DEBUG3 : ERROR; > + elog(elevel, "out of memory"); > + return; > + } > + /* printf("Using: %s\n", filename); */ > > + ReadConfigFile(filename, context); > + > + free(filename); > +} > > > /* ---------------- > diff -u -r postgresql-7.3.2/src/backend/utils/misc/guc.c > postgresql-7.3.2.ec/src/backend/utils/misc/guc.c > --- postgresql-7.3.2/src/backend/utils/misc/guc.c Tue Jan 28 13:04:13 2003 > +++ postgresql-7.3.2.ec/src/backend/utils/misc/guc.c Mon Feb 17 14:38:34 2003 > @@ -51,6 +51,12 @@ > #include "utils/pg_locale.h" > #include "pgstat.h" > > +/* Added for config file only startup MLW */ > +char *explicit_pgconfig = NULL; > +char *explicit_hbafile = NULL; > +char *explicit_identfile = NULL; > +bool explicit_isdir=false; > +char *pgdatadir = NULL; > > /* XXX these should be in other modules' header files */ > extern bool Log_connections; > @@ -113,6 +119,7 @@ > char *client_min_messages_str = NULL; > const char client_min_messages_str_default[] = "notice"; > > +static void ReadConfigFile(char *filename, GucContext context); > > #ifndef PG_KRB_SRVTAB > #define PG_KRB_SRVTAB "" > @@ -146,7 +153,8 @@ > PGC_BOOL, > PGC_INT, > PGC_REAL, > - PGC_STRING > + PGC_STRING, > + PGC_FUNCTION > }; > > /* Generic fields applicable to all types of variables */ > @@ -239,6 +247,13 @@ > char *tentative_val; > }; > > +struct config_function > +{ > + struct config_generic gen; > + void (*function)(char *param, GucContext context); > +}; > + > + > /* Macros for freeing malloc'd pointers only if appropriate to do so */ > /* Some of these tests are probably redundant, but be safe ... */ > #define SET_STRING_VARIABLE(rec, newval) \ > @@ -853,10 +868,32 @@ > }, > > { > + {"data_dir", PGC_POSTMASTER}, &pgdatadir, > + "", NULL, NULL > + }, > + > + { > + {"hba_conf", PGC_POSTMASTER}, &explicit_hbafile, > + "", NULL, NULL > + }, > + > + { > + {"ident_conf", PGC_POSTMASTER}, &explicit_identfile, > + "", NULL, NULL > + }, > + > + { > {NULL, 0}, NULL, NULL, NULL, NULL > } > }; > > + > +static struct config_function ConfigureFunctions[] = > +{ > + { {"include", PGC_POSTMASTER}, ReadConfigFile}, > + { {NULL,0}, NULL} > +}; > + > /******** end of options list ********/ > > > @@ -919,6 +956,12 @@ > conf->gen.vartype = PGC_STRING; > num_vars++; > } > + for(i = 0; ConfigureFunctions[i].gen.name; i++) > + { > + struct config_function *conf = &ConfigureFunctions[i]; > + conf->gen.vartype = PGC_FUNCTION; > + num_vars++; > + } > > guc_vars = (struct config_generic **) > malloc(num_vars * sizeof(struct config_generic *)); > @@ -939,6 +982,9 @@ > for (i = 0; ConfigureNamesString[i].gen.name; i++) > guc_vars[num_vars++] = &ConfigureNamesString[i].gen; > > + for (i = 0; ConfigureFunctions[i].gen.name; i++) > + guc_vars[num_vars++] = &ConfigureFunctions[i].gen; > + > qsort((void *) guc_vars, num_vars, sizeof(struct config_generic *), > guc_var_compare); > > @@ -1135,6 +1181,8 @@ > conf->session_val = str; > break; > } > + case PGC_FUNCTION: /* Nothing to do */ > + break; > } > } > > @@ -1280,6 +1328,8 @@ > guc_dirty = true; > break; > } > + case PGC_FUNCTION: /* Nothing to do */ > + break; > } > } > } > @@ -1421,6 +1471,8 @@ > conf->gen.status = 0; > break; > } > + case PGC_FUNCTION: /* Nothing to do */ > + break; > } > } > > @@ -1684,6 +1736,17 @@ > */ > switch (record->vartype) > { > + case PGC_FUNCTION: > + if(!DoIt) > + { > + /* During the "checking" stage of configuration > + * read, run functions > + */ > + struct config_function *fn = > + (struct config_function *)record; > + fn->function((char *)value, context); > + } > + break; > case PGC_BOOL: > { > struct config_bool *conf = (struct config_bool *) > record; > @@ -2063,6 +2126,9 @@ > > case PGC_STRING: > return *((struct config_string *) record)->variable; > + case PGC_FUNCTION: > + /* Should never really happen */ > + return NULL; > } > return NULL; > } > @@ -2097,6 +2163,9 @@ > > case PGC_STRING: > return ((struct config_string *) record)->reset_val; > + case PGC_FUNCTION: > + /* Should never really happen */ > + return NULL; > } > return NULL; > } > diff -u -r postgresql-7.3.2/src/backend/utils/misc/postgresql.conf.sample > postgresql-7.3.2.ec/src/backend/utils/misc/postgresql.conf.sample > --- postgresql-7.3.2/src/backend/utils/misc/postgresql.conf.sample Mon Jan 27 > 22:44:09 2003 > +++ postgresql-7.3.2.ec/src/backend/utils/misc/postgresql.conf.sample Mon Feb 17 > 12:14:12 2003 > @@ -23,6 +23,21 @@ > > #======================================================================== > > +# Allows PostgreSQL to include another file > +# include = '/somedir/pgdefs.conf' > + > +# Allows PostgreSQL to use a pg_hba.conf file > +# which is not in the database directory. > +# hba_conf = '/etc/postgres/pg_hba.conf' > + > +# Allows PostgreSQL to use a pg_ident.conf file > +# which is not in the database directory. > +# ident_conf = '/etc/postgres/pg_ident.conf' > + > +# Allows Postgres to find its data directory > +# from this configuration file. > +# data_dir = '/RAID0/postgres' > + > > # > # Connection Parameters > diff -u -r postgresql-7.3.2/src/include/utils/guc.h > postgresql-7.3.2.ec/src/include/utils/guc.h > --- postgresql-7.3.2/src/include/utils/guc.h Mon Oct 21 14:57:35 2002 > +++ postgresql-7.3.2.ec/src/include/utils/guc.h Mon Feb 17 14:40:57 2003 > @@ -137,5 +137,11 @@ > extern char *client_min_messages_str; > > extern const char client_min_messages_str_default[]; > +/* Added MLW */ > +extern char *explicit_pgconfig; > +extern char *explicit_hbafile; > +extern char *explicit_identfile; > +extern bool explicit_isdir; > +extern char *pgdatadir; > > #endif /* GUC_H */ > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to [EMAIL PROTECTED] so that your > message can get through to the mailing list cleanly -- Bruce Momjian | http://candle.pha.pa.us [EMAIL PROTECTED] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faqs/FAQ.html