diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index acc1ec99c3..293ee35582 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1,5 +1,5 @@ Server Configuration @@ -2407,8 +2407,7 @@ SELECT * FROM parent WHERE key = 2400; Runs the server silently. If this option is set, the server will automatically run in background and any controlling - terminals are disassociated (same effect as - postmaster's option). + terminals are disassociated. The server's standard output and standard error are redirected to /dev/null, so any messages sent to them will be lost. Unless syslog logging is selected or @@ -4054,6 +4053,19 @@ plruby.use_strict = true # generates error: unknown class name + + allow_system_table_mods (boolean) + + allow_system_table_mods configuration parameter + + + + Allows the modification of the structure of system tables. + This is used by initdb. + + + + debug_assertions (boolean) @@ -4075,6 +4087,35 @@ plruby.use_strict = true # generates error: unknown class name + + ignore_system_indexes (boolean) + + ignore_system_indexes configuration parameter + + + + Ignore system indexes when reading system tables (but still + update the indexes when modifying the tables). This is useful + when recovering from damaged system indexes. + + + + + + post_auth_delay (integer) + + post_auth_delay configuration parameter + + + + If nonzero, a delay of this many seconds occurs when a new + server process is started, after it conducts the + authentication procedure. This is intended to give an + opportunity to attach to the server process with a debugger. + + + + pre_auth_delay (integer) @@ -4082,11 +4123,11 @@ plruby.use_strict = true # generates error: unknown class name - If nonzero, a delay of this many seconds occurs just after a new - server process is forked, before it conducts the authentication - process. This is intended to give an opportunity to attach to the - server process with a debugger to trace down misbehavior in - authentication. + If nonzero, a delay of this many seconds occurs just after a + new server process is forked, before it conducts the + authentication procedure. This is intended to give an + opportunity to attach to the server process with a debugger to + trace down misbehavior in authentication. @@ -4182,9 +4223,12 @@ plruby.use_strict = true # generates error: unknown class name Short Options - For convenience there are also single letter command-line option switches - available for some parameters. They are described in . + For convenience there are also single letter command-line option + switches available for some parameters. They are described in + . Some of these + options exist for historical reasons, and their presence as a + single-letter option does not necessarily indicate an endorsement + to use the option heavily. @@ -4198,6 +4242,10 @@ plruby.use_strict = true # generates error: unknown class name + + + debug_assertions = x + shared_buffers = x @@ -4206,6 +4254,26 @@ plruby.use_strict = true # generates error: unknown class name log_min_messages = DEBUGx + + + datestyle = euro + + + + , , , + , , + , + + + enable_bitmapscan = off, + enable_hashjoin = off, + enable_indexscan = off, + enable_mergejoin = off, + enable_nestloop = off, + enable_seqscan = off, + enable_tidscan = off + + fsync = off @@ -4230,57 +4298,36 @@ plruby.use_strict = true # generates error: unknown class name max_connections = x + + + allow_system_table_mods = on + port = x - - - , , , - , , - , - - For historical reasons, these options must be passed to - the individual server process via the - postmaster option, for example, - -$ postmaster -o '-S 1024 -s' - - or via PGOPTIONS from the client side, as - explained above. - - - - - enable_bitmapscan = off, - enable_hashjoin = off, - enable_indexscan = off, - enable_mergejoin = off, - enable_nestloop = off, - enable_seqscan = off, - enable_tidscan = off - + + ignore_system_indexes = on - - + log_statement_stats = on - - - + work_mem = x - - , , + , , log_parser_stats = on, log_planner_stats = on, log_executor_stats = on + + + post_auth_delay = x +
diff --git a/doc/src/sgml/ref/postgres-ref.sgml b/doc/src/sgml/ref/postgres-ref.sgml index 4baecaf2ed..1cf8521beb 100644 --- a/doc/src/sgml/ref/postgres-ref.sgml +++ b/doc/src/sgml/ref/postgres-ref.sgml @@ -1,5 +1,5 @@ @@ -21,53 +21,9 @@ PostgreSQL documentation - postgres - -A 01 - -B nbuffers - -c name=value - -d debug-level - --describe-config - -D datadir - -e - -E - -fsitnmh - -F - -N - -o filename - -O - -P - - -s - -tpaplex - - -S work-mem - -W seconds - --name=value + option database - - - postgres - -A 01 - -B nbuffers - -c name=value - -d debug-level - -D datadir - -e - -fsitnmh - -F - -o filename - -O - -p database - -P - - -s - -tpaplex - - -S work-mem - -v protocol - -W seconds - --name=value @@ -77,23 +33,21 @@ PostgreSQL documentation The postgres executable is the actual PostgreSQL server process that processes - queries. It is normally not called directly; instead a multiuser server is started. - - - - The second form above is how - postgres is invoked by the (only - conceptually, since both postmaster and - postgres are in fact the same program); it - should not be invoked directly this way. The first form invokes - the server directly in interactive single-user mode. The primary use - for this mode is during bootstrapping by . - Sometimes it is used for debugging or disaster recovery. + SQL statements. It is normally not called directly; instead a + multiuser server is started. + Conceptually, the postmaster starts a new + postgres process for each connection. + (postmaster and postgres + are in fact the same program, and on most platforms the connection + process is forked). + If the postgres command is called directly, it + invokes the server in interactive single-user mode. The primary + use for this mode is during bootstrapping by . Sometimes it is used for debugging or + disaster recovery. When invoked in interactive mode from the shell, the user can enter queries and the results will be printed to the screen, but in a form that is more useful for developers than end users. But note @@ -117,11 +71,9 @@ PostgreSQL documentation When postgres is started by a then it - inherits all options set by the latter. Additionally, - postgres-specific options can be passed - from the postmaster with the - switch. + linkend="app-postmaster"> then it inherits all options set by the + latter. In single-user mode, postgres accepts + all the options that postmaster would accept. @@ -141,74 +93,17 @@ PostgreSQL documentation The options , , , , , - , and have the same meanings - as the except that - -d 0 prevents the server log level of - the postmaster from being propagated to postgres. + , , , + , and + have the same meanings as with the + except that -d 0 prevents the server log level of the + postmaster from being propagated to + postgres. Other postmaster + options are also accepted but will have no noticeable effect + because they only apply to the multiuser server mode, namely + , , , + , and . - - - - - - - Sets the default date style to European, that is - DMY ordering of input date fields. This also causes - the day to be printed before the month in certain date output formats. - See for more information. - - - - - - filename - - - Send all server log output to - filename. - If postgres is running under the - postmaster, this option is ignored, - and the stderr inherited from the - postmaster is used. - - - - - - - - - Ignore system indexes when reading system tables (but still update - the indexes when modifying the tables). This is useful when - recovering from damaged system indexes. - - - - - - - - - Print time information and other statistics at the end of each command. - This is useful for benchmarking or for use in tuning the number of - buffers. - - - - - - work-mem - - - Specifies the amount of memory to be used by internal sorts and hashes - before resorting to temporary disk files. See the description of the - work_mem configuration parameter in . - - - - - @@ -235,13 +130,27 @@ PostgreSQL documentation - + Disables use of newline as a statement delimiter. + + + filename + + + Send all server log output to + filename. + If postgres is running under the + postmaster, this option is ignored, + and the stderr inherited from the + postmaster is used. + + +
@@ -249,69 +158,13 @@ PostgreSQL documentation Semi-internal Options - There are several other options that may be specified, used - mainly for debugging purposes. These are listed here only for - the use by PostgreSQL system - developers. Use of any of these options is highly - discouraged. Furthermore, any of these options may - disappear or change in a future release without notice. - + The options , , + , , and + have the same meanings as with the and are reserved for debugging and + disaster recovery. Further options for internal use are: + - - - { s | i | m | n | h } - - - Forbids the use of particular scan and join methods: - s and i - disable sequential and index scans respectively, while - n, m, and h - disable nested-loop, merge and hash joins respectively. - - - - - Neither sequential scans nor nested-loop joins can be disabled completely; - the -fs and -fn - options simply discourage the optimizer from using those - plan types if it has any other alternative. - - - - - - - - - - Allows the structure of system tables to be modified. This is - used by initdb. - - - - - - database - - - Indicates that this process has been started by a - postmaster and specifies the database to use. - etc. - - - - - - pa[rser] | pl[anner] | e[xecutor] - - - Print timing statistics for each query relating to each of the - major system modules. This option cannot be used together - with the option. - - - - protocol @@ -323,12 +176,12 @@ PostgreSQL documentation - seconds + database - As soon as this option is encountered, the process sleeps for - the specified amount of seconds. This gives developers time - to attach a debugger to the server process. + Indicates that this process has been started by a + postmaster and specifies the database to use. + etc. @@ -343,8 +196,8 @@ PostgreSQL documentation - + @@ -361,13 +214,7 @@ PostgreSQL documentation - - - - For others, which have little influence during single-user mode, - see . - @@ -423,7 +270,7 @@ PostgreSQL documentation - But if you use the diff --git a/doc/src/sgml/ref/postmaster.sgml b/doc/src/sgml/ref/postmaster.sgml index aa332ed2f2..77275e8d93 100644 --- a/doc/src/sgml/ref/postmaster.sgml +++ b/doc/src/sgml/ref/postmaster.sgml @@ -1,5 +1,5 @@ @@ -22,22 +22,7 @@ PostgreSQL documentation postmaster - -A 01 - -B nbuffers - -c name=value - -d debug-level - -D datadir - -F - -h hostname - -i - -k directory - -l - -N max-connections - -o extra-options - -p port - -S - --name=value - -n-s + option @@ -70,8 +55,7 @@ PostgreSQL documentation location (the data area). More than one postmaster process can run on a system at one time, so long as they use different data areas and different - communication ports (see below). A data area is created with . + communication ports (see below). @@ -83,6 +67,7 @@ PostgreSQL documentation directly to the data area directory created by initdb. Other possible file layouts are discussed in . + A data area is created with . @@ -92,8 +77,12 @@ PostgreSQL documentation postmaster accepts the following command line arguments. For a detailed discussion of the options - consult . You can also save typing most of these + consult . You can save typing most of these options by setting up a configuration file. + + + + General Purpose @@ -156,6 +145,18 @@ PostgreSQL documentation + + + + + Sets the default date style to European, that is + DMY ordering of input date fields. This also causes + the day to be printed before the month in certain date output formats. + See for more information. + + + + @@ -264,6 +265,12 @@ PostgreSQL documentation linkend="app-postgres"> for possibilities. If the option string contains any spaces, the entire string must be quoted. + + + The use of this option is obsolete; all command-line options + for server processes can be specified directly on the + postmaster command line + @@ -284,6 +291,17 @@ PostgreSQL documentation + + + + + Print time information and other statistics at the end of each command. + This is useful for benchmarking or for use in tuning the number of + buffers. + + + + @@ -318,55 +336,124 @@ PostgreSQL documentation - + - - Two additional command line options are available for debugging - problems that cause a server process to die abnormally. The - ordinary strategy in this situation is to notify all other server - processes that they must terminate and then reinitialize the - shared memory and semaphores. This is because an errant server - process could have corrupted some shared state before terminating. - These options select alternative behaviors of the - postmaster in this situation. - Neither option is intended for use in ordinary - operation. - + + Semi-internal Options - - - - - These special-case options are: + + There are several other options that may be specified, used + mainly for debugging purposes and in some cases to assist with + recovery of severely damaged databases. There should be no reason + to use them in a production database setup. These are listed + here only for the use by PostgreSQL + system developers. Use of any of these options is + highly discouraged. Furthermore, any of these options + may disappear or change in a future release without notice. + + + { s | i | m | n | h } + + + Forbids the use of particular scan and join methods: + s and i + disable sequential and index scans respectively, while + n, m, and h + disable nested-loop, merge and hash joins respectively. + + + + Neither sequential scans nor nested-loop joins can be disabled + completely; the -fs and + -fn options simply discourage the optimizer + from using those plan types if it has any other alternative. + + + + - postmaster - will not reinitialize shared data structures. A knowledgeable system - programmer can then use a debugger - to examine shared memory and semaphore state. + This option is for debugging problems that cause a server + process to die abnormally. The ordinary strategy in this + situation is to notify all other server processes that they + must terminate and then reinitialize the shared memory and + semaphores. This is because an errant server process could + have corrupted some shared state before terminating. This + option specifies that the postmaster will + not reinitialize shared data structures. A knowledgeable + system programmer can then use a debugger to examine shared + memory and semaphore state. - - + + - postmaster - will stop all other server processes by sending the signal - SIGSTOP, - but will not cause them to terminate. This permits system programmers - to collect core dumps from all server processes by hand. + Allows the structure of system tables to be modified. This is + used by initdb. + + + + + + + + + Ignore system indexes when reading system tables (but still update + the indexes when modifying the tables). This is useful when + recovering from damaged system indexes. + + + + + + pa[rser] | pl[anner] | e[xecutor] + + + Print timing statistics for each query relating to each of the + major system modules. This option cannot be used together + with the option. + + + + + + + + + This option is for debugging problems that cause a server + process to die abnormally. The ordinary strategy in this + situation is to notify all other server processes that they + must terminate and then reinitialize the shared memory and + semaphores. This is because an errant server process could + have corrupted some shared state before terminating. This + option specifies that the postmaster will + stop all other server processes by sending the signal + SIGSTOP, but will not cause them to + terminate. This permits system programmers to collect core + dumps from all server processes by hand. + + + + + + seconds + + + A delay of this many seconds occurs when a new server process + is started, after it conducts the authentication procedure. + This is intended to give an opportunity to attach to the + server process with a debugger. - - diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 6ca2fe594b..3b840d2bb4 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/index/genam.c,v 1.52 2005/12/03 05:51:00 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/index/genam.c,v 1.53 2006/01/05 10:07:44 petere Exp $ * * NOTES * many of the old access method routines have been turned into @@ -185,7 +185,7 @@ systable_beginscan(Relation heapRelation, Relation irel; if (indexOK && - !IsIgnoringSystemIndexes() && + !IgnoreSystemIndexes && !ReindexIsProcessingIndex(indexId)) irel = index_open(indexId); else diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 66cf4c4ce0..68dd732ff1 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.210 2006/01/04 21:06:30 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.211 2006/01/05 10:07:44 petere Exp $ * *------------------------------------------------------------------------- */ @@ -255,10 +255,13 @@ BootstrapMain(int argc, char *argv[]) argc--; } - while ((flag = getopt(argc, argv, "B:c:d:D:Fo:p:x:-:")) != -1) + while ((flag = getopt(argc, argv, "B:c:d:D:Fr:x:y:-:")) != -1) { switch (flag) { + case 'B': + SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV); + break; case 'D': userDoption = optarg; break; @@ -278,18 +281,15 @@ BootstrapMain(int argc, char *argv[]) case 'F': SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV); break; - case 'o': + case 'r': StrNCpy(OutputFileName, optarg, MAXPGPATH); break; case 'x': xlogop = atoi(optarg); break; - case 'p': + case 'y': dbname = strdup(optarg); break; - case 'B': - SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV); - break; case 'c': case '-': { @@ -376,7 +376,7 @@ BootstrapMain(int argc, char *argv[]) CreateDataDirLockFile(false); SetProcessingMode(BootstrapProcessing); - IgnoreSystemIndexes(true); + IgnoreSystemIndexes = true; BaseInit(); @@ -499,14 +499,16 @@ BootstrapMain(int argc, char *argv[]) static void usage(void) { - write_stderr("Usage:\n" - " postgres -boot [OPTION]... DBNAME\n" - " -c NAME=VALUE set run-time parameter\n" - " -d 1-5 debug level\n" - " -D datadir data directory\n" - " -F turn off fsync\n" - " -o file send debug output to file\n" - " -x num internal use\n"); + fprintf(stderr, _("This is the PostgreSQL bootstrap process.\n\n")); + fprintf(stderr, _("Usage:\n postgres -boot [OPTION]... DBNAME\n\n")); + fprintf(stderr, _("Options:\n")); + fprintf(stderr, _(" -B NBUFFERS number of shared buffers\n")); + fprintf(stderr, _(" -c NAME=VALUE set run-time parameter\n")); + fprintf(stderr, _(" -d 1-5 debugging level\n")); + fprintf(stderr, _(" -D DATADIR database directory\n")); + fprintf(stderr, _(" -F turn fsync off\n")); + fprintf(stderr, _(" -r FILENAME send stdout and stderr to given file\n")); + fprintf(stderr, _(" -x NUM internal use\n")); proc_exit(1); } diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index e9ac17d148..8a5888a404 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.197 2005/11/22 18:17:09 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.198 2006/01/05 10:07:45 petere Exp $ * *------------------------------------------------------------------------- */ @@ -845,7 +845,7 @@ RelationBuildTriggers(Relation relation) /* * Note: since we scan the triggers using TriggerRelidNameIndexId, we will * be reading the triggers in name order, except possibly during - * emergency-recovery operations (ie, IsIgnoringSystemIndexes). This in + * emergency-recovery operations (ie, IgnoreSystemIndexes). This in * turn ensures that triggers will be fired in name order. */ ScanKeyInit(&skey, diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index ec753de8ca..d9a9fdb9cf 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.115 2005/11/22 18:17:14 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.116 2006/01/05 10:07:45 petere Exp $ * *------------------------------------------------------------------------- */ @@ -107,7 +107,7 @@ get_relation_info(Oid relationObjectId, RelOptInfo *rel) /* * Make list of indexes. Ignore indexes on system catalogs if told to. */ - if (IsIgnoringSystemIndexes() && IsSystemClass(relation->rd_rel)) + if (IgnoreSystemIndexes && IsSystemClass(relation->rd_rel)) hasindex = false; else hasindex = relation->rd_rel->relhasindex; diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 187bfeb47e..31d370ebbb 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.477 2006/01/04 21:06:31 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.478 2006/01/05 10:07:45 petere Exp $ * * NOTES * @@ -432,8 +432,6 @@ PostmasterMain(int argc, char *argv[]) ALLOCSET_DEFAULT_MAXSIZE); MemoryContextSwitchTo(PostmasterContext); - IgnoreSystemIndexes(false); - if (find_my_exec(argv[0], my_exec_path) < 0) elog(FATAL, "%s: could not locate my own executable path", argv[0]); @@ -447,90 +445,108 @@ PostmasterMain(int argc, char *argv[]) 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:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:W:-:")) != -1) { switch (opt) { case 'A': -#ifdef USE_ASSERT_CHECKING SetConfigOption("debug_assertions", optarg, PGC_POSTMASTER, PGC_S_ARGV); -#else - write_stderr("%s: assert checking is not compiled in\n", progname); -#endif - break; - case 'a': - /* Can no longer set authentication method. */ break; + case 'B': SetConfigOption("shared_buffers", optarg, PGC_POSTMASTER, PGC_S_ARGV); break; - case 'b': - /* Can no longer set the backend executable file to use. */ - break; + case 'D': userDoption = optarg; break; + case 'd': set_debug_options(atoi(optarg), PGC_POSTMASTER, PGC_S_ARGV); break; + + case 'E': + SetConfigOption("log_statement", "all", PGC_POSTMASTER, PGC_S_ARGV); + break; + + case 'e': + SetConfigOption("datestyle", "euro", PGC_POSTMASTER, PGC_S_ARGV); + break; + case 'F': SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV); break; + + case 'f': + if (!set_plan_disabling_options(optarg, PGC_POSTMASTER, PGC_S_ARGV)) + { + write_stderr("%s: invalid argument for option -f: \"%s\"\n", + progname, optarg); + ExitPostmaster(1); + } + break; + case 'h': SetConfigOption("listen_addresses", optarg, PGC_POSTMASTER, PGC_S_ARGV); break; + case 'i': SetConfigOption("listen_addresses", "*", PGC_POSTMASTER, PGC_S_ARGV); break; + + case 'j': + /* only used by interactive backend */ + break; + case 'k': SetConfigOption("unix_socket_directory", optarg, PGC_POSTMASTER, PGC_S_ARGV); break; -#ifdef USE_SSL + case 'l': SetConfigOption("ssl", "true", PGC_POSTMASTER, PGC_S_ARGV); break; -#endif - case 'm': - /* Multiplexed backends no longer supported. */ - break; - case 'M': - /* - * ignore this flag. This may be passed in because the - * program was run as 'postgres -M' instead of 'postmaster' - */ - break; case 'N': - /* The max number of backends to start. */ SetConfigOption("max_connections", optarg, PGC_POSTMASTER, PGC_S_ARGV); break; + case 'n': /* Don't reinit shared mem after abnormal exit */ Reinit = false; break; - case 'o': - /* - * Other options to pass to the backend on the command line - */ + case 'O': + SetConfigOption("allow_system_table_mods", "true", PGC_POSTMASTER, PGC_S_ARGV); + break; + + case 'o': + /* Other options to pass to the backend on the command line */ snprintf(ExtraOptions + strlen(ExtraOptions), sizeof(ExtraOptions) - strlen(ExtraOptions), " %s", optarg); break; + + case 'P': + SetConfigOption("ignore_system_indexes", "true", PGC_POSTMASTER, PGC_S_ARGV); + break; + case 'p': SetConfigOption("port", optarg, PGC_POSTMASTER, PGC_S_ARGV); break; - case 'S': - /* - * Start in 'S'ilent mode (disassociate from controlling tty). - * You may also think of this as 'S'ysV mode since it's most - * badly needed on SysV-derived systems like SVR4 and HP-UX. - */ - SetConfigOption("silent_mode", "true", PGC_POSTMASTER, PGC_S_ARGV); + case 'r': + /* only used by single-user backend */ break; - case 's': + case 'S': + SetConfigOption("work_mem", optarg, PGC_POSTMASTER, PGC_S_ARGV); + break; + + case 's': + SetConfigOption("log_statement_stats", optarg, PGC_POSTMASTER, PGC_S_ARGV); + break; + + case 'T': /* * In the event that some backend dumps core, send SIGSTOP, * rather than SIGQUIT, to all its peers. This lets the wily @@ -538,6 +554,28 @@ PostmasterMain(int argc, char *argv[]) */ SendStop = true; break; + + case 't': + { + const char *tmp = get_stats_option_name(optarg); + + if (tmp) + { + SetConfigOption(tmp, "true", PGC_POSTMASTER, PGC_S_ARGV); + } + else + { + write_stderr("%s: invalid argument for option -t: \"%s\"\n", + progname, optarg); + ExitPostmaster(1); + } + break; + } + + case 'W': + SetConfigOption("post_auth_delay", optarg, PGC_POSTMASTER, PGC_S_ARGV); + break; + case 'c': case '-': { @@ -1113,6 +1151,7 @@ usage(const char *progname) printf(_(" -c NAME=VALUE set run-time parameter\n")); printf(_(" -d 1-5 debugging level\n")); printf(_(" -D DATADIR database directory\n")); + printf(_(" -e use European date input format (DMY)\n")); printf(_(" -F turn fsync off\n")); printf(_(" -h HOSTNAME host name or IP address to listen on\n")); printf(_(" -i enable TCP/IP connections\n")); @@ -1121,18 +1160,25 @@ usage(const char *progname) printf(_(" -l enable SSL connections\n")); #endif printf(_(" -N MAX-CONNECT maximum number of allowed connections\n")); - printf(_(" -o OPTIONS pass \"OPTIONS\" to each server process\n")); + printf(_(" -o OPTIONS pass \"OPTIONS\" to each server process (obsolete)\n")); printf(_(" -p PORT port number to listen on\n")); - printf(_(" -S silent mode (start in background without logging output)\n")); + printf(_(" -s show statistics after each query\n")); + printf(_(" -S WORK-MEM set amount of memory for sorts (in kB)\n")); + printf(_(" --NAME=VALUE set run-time parameter\n")); printf(_(" --help show this help, then exit\n")); printf(_(" --version output version information, then exit\n")); printf(_("\nDeveloper options:\n")); + printf(_(" -f s|i|n|m|h forbid use of some plan types\n")); printf(_(" -n do not reinitialize shared memory after abnormal exit\n")); - printf(_(" -s send SIGSTOP to all backend servers if one dies\n")); + printf(_(" -O allow system table structure changes\n")); + printf(_(" -P disable system indexes\n")); + printf(_(" -t pa|pl|ex show timings after each query\n")); + printf(_(" -T send SIGSTOP to all backend servers if one dies\n")); + printf(_(" -W NUM wait NUM seconds to allow attach from a debugger\n")); printf(_("\nPlease read the documentation for the complete list of run-time\n" - "configuration settings and how to set them on the command line or in\n" + "configuration settings and how to set them on the command line or in\n" "the configuration file.\n\n" "Report bugs to .\n")); } @@ -2797,8 +2843,8 @@ BackendRun(Port *port) * Now, build the argv vector that will be given to PostgresMain. * * The layout of the command line is - * postgres [secure switches] -p databasename [insecure switches] - * where the switches after -p come from the client request. + * postgres [secure switches] -y databasename [insecure switches] + * where the switches after -y come from the client request. * * The maximum possible number of commandline arguments that could come * from ExtraOptions or port->cmdline_options is (strlen + 1) / 2; see @@ -2829,9 +2875,9 @@ BackendRun(Port *port) /* * Tell the backend it is being called from the postmaster, and which - * database to use. -p marks the end of secure switches. + * database to use. -y marks the end of secure switches. */ - av[ac++] = "-p"; + av[ac++] = "-y"; av[ac++] = port->database_name; /* @@ -3575,7 +3621,7 @@ StartChildProcess(int xlop) snprintf(xlbuf, sizeof(xlbuf), "-x%d", xlop); av[ac++] = xlbuf; - av[ac++] = "-p"; + av[ac++] = "-y"; av[ac++] = "template1"; av[ac] = NULL; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 8f28ce6d02..e38e66a38c 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.476 2006/01/05 03:01:35 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.477 2006/01/05 10:07:45 petere Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -84,6 +84,10 @@ LogStmtLevel log_statement = LOGSTMT_NONE; /* GUC variable for maximum stack depth (measured in kilobytes) */ int max_stack_depth = 2048; +/* wait N seconds to allow attach from a debugger */ +int PostAuthDelay = 0; + + /* ---------------- * private variables @@ -2338,30 +2342,30 @@ usage(const char *progname) { printf(_("%s is the PostgreSQL stand-alone backend. It is not\nintended to be used by normal users.\n\n"), progname); - printf(_("Usage:\n %s [OPTION]... [DBNAME]\n\n"), progname); + printf(_("Usage:\n %s [OPTION]... DBNAME\n\n"), progname); printf(_("Options:\n")); #ifdef USE_ASSERT_CHECKING printf(_(" -A 1|0 enable/disable run-time assert checking\n")); #endif printf(_(" -B NBUFFERS number of shared buffers\n")); printf(_(" -c NAME=VALUE set run-time parameter\n")); - printf(_(" -d 0-5 debugging level (0 is off)\n")); + printf(_(" -d 0-5 debugging level\n")); printf(_(" -D DATADIR database directory\n")); printf(_(" -e use European date input format (DMY)\n")); - printf(_(" -E echo query before execution\n")); + printf(_(" -E echo statement before execution\n")); printf(_(" -F turn fsync off\n")); - printf(_(" -N do not use newline as interactive query delimiter\n")); - printf(_(" -o FILENAME send stdout and stderr to given file\n")); - printf(_(" -P disable system indexes\n")); + printf(_(" -j do not use newline as interactive query delimiter\n")); + printf(_(" -r FILENAME send stdout and stderr to given file\n")); printf(_(" -s show statistics after each query\n")); printf(_(" -S WORK-MEM set amount of memory for sorts (in kB)\n")); + printf(_(" --NAME=VALUE set run-time parameter\n")); printf(_(" --describe-config describe configuration parameters, then exit\n")); printf(_(" --help show this help, then exit\n")); printf(_(" --version output version information, then exit\n")); printf(_("\nDeveloper options:\n")); printf(_(" -f s|i|n|m|h forbid use of some plan types\n")); - printf(_(" -i do not execute queries\n")); printf(_(" -O allow system table structure changes\n")); + printf(_(" -P disable system indexes\n")); printf(_(" -t pa|pl|ex show timings after each query\n")); printf(_(" -W NUM wait NUM seconds to allow attach from a debugger\n")); printf(_("\nReport bugs to .\n")); @@ -2403,6 +2407,66 @@ set_debug_options(int debug_flag, GucContext context, GucSource source) } +bool +set_plan_disabling_options(const char *arg, GucContext context, GucSource source) +{ + char *tmp = NULL; + + switch (arg[0]) + { + case 's': /* seqscan */ + tmp = "enable_seqscan"; + break; + case 'i': /* indexscan */ + tmp = "enable_indexscan"; + break; + case 'b': /* bitmapscan */ + tmp = "enable_bitmapscan"; + break; + case 't': /* tidscan */ + tmp = "enable_tidscan"; + break; + case 'n': /* nestloop */ + tmp = "enable_nestloop"; + break; + case 'm': /* mergejoin */ + tmp = "enable_mergejoin"; + break; + case 'h': /* hashjoin */ + tmp = "enable_hashjoin"; + break; + } + if (tmp) + { + SetConfigOption(tmp, "false", context, source); + return true; + } + else + return false; +} + + +const char * +get_stats_option_name(const char *arg) +{ + switch (arg[0]) + { + case 'p': + if (optarg[1] == 'a') /* "parser" */ + return "log_parser_stats"; + else if (optarg[1] == 'l') /* "planner" */ + return "log_planner_stats"; + break; + + case 'e': /* "executor" */ + return "log_executor_stats"; + break; + } + + return NULL; +} + + /* ---------------------------------------------------------------- * PostgresMain * postgres main loop -- all backends, interactive or otherwise start here @@ -2427,7 +2491,6 @@ PostgresMain(int argc, char *argv[], const char *username) GucContext ctx; GucSource gucsource; bool am_superuser; - char *tmp; int firstchar; char stack_base; StringInfoData input_message; @@ -2518,164 +2581,100 @@ PostgresMain(int argc, char *argv[], const char *username) ctx = PGC_POSTMASTER; gucsource = PGC_S_ARGV; /* initial switches came from command line */ - while ((flag = getopt(argc, argv, "A:B:c:D:d:Eef:FiNOPo:p:S:st:v:W:-:")) != -1) + while ((flag = getopt(argc, argv, "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:v:W:y:-:")) != -1) { switch (flag) { case 'A': -#ifdef USE_ASSERT_CHECKING SetConfigOption("debug_assertions", optarg, ctx, gucsource); -#else - ereport(WARNING, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("assert checking is not compiled in"))); -#endif break; case 'B': - - /* - * specify the size of buffer pool - */ SetConfigOption("shared_buffers", optarg, ctx, gucsource); break; - case 'D': /* PGDATA or config directory */ + case 'D': if (secure) userDoption = optarg; break; - case 'd': /* debug level */ + case 'd': debug_flag = atoi(optarg); break; case 'E': - - /* - * E - echo the query the user entered - */ EchoQuery = true; break; case 'e': - - /* - * Use European date input format (DMY) - */ SetConfigOption("datestyle", "euro", ctx, gucsource); break; case 'F': - - /* - * turn off fsync - */ SetConfigOption("fsync", "false", ctx, gucsource); break; case 'f': - - /* - * f - forbid generation of certain plans - */ - tmp = NULL; - switch (optarg[0]) - { - case 's': /* seqscan */ - tmp = "enable_seqscan"; - break; - case 'i': /* indexscan */ - tmp = "enable_indexscan"; - break; - case 'b': /* bitmapscan */ - tmp = "enable_bitmapscan"; - break; - case 't': /* tidscan */ - tmp = "enable_tidscan"; - break; - case 'n': /* nestloop */ - tmp = "enable_nestloop"; - break; - case 'm': /* mergejoin */ - tmp = "enable_mergejoin"; - break; - case 'h': /* hashjoin */ - tmp = "enable_hashjoin"; - break; - default: - errs++; - } - if (tmp) - SetConfigOption(tmp, "false", ctx, gucsource); + if (!set_plan_disabling_options(optarg, ctx, gucsource)) + errs++; break; - case 'N': + case 'h': + SetConfigOption("listen_addresses", optarg, ctx, gucsource); + break; - /* - * N - Don't use newline as a query delimiter - */ + case 'i': + SetConfigOption("listen_addresses", "*", ctx, gucsource); + break; + + case 'j': UseNewLine = 0; break; - case 'O': - - /* - * allow system table structure modifications - */ - if (secure) /* XXX safe to allow from client??? */ - allowSystemTableMods = true; + case 'k': + SetConfigOption("unix_socket_directory", optarg, ctx, gucsource); break; - case 'P': + case 'l': + SetConfigOption("ssl", "true", ctx, gucsource); + break; - /* - * ignore system indexes - * - * As of PG 7.4 this is safe to allow from the client, since - * it only disables reading the system indexes, not writing - * them. Worst case consequence is slowness. - */ - IgnoreSystemIndexes(true); + case 'N': + SetConfigOption("max_connections", optarg, ctx, gucsource); + break; + + case 'n': + /* ignored for consistency with postmaster */ + break; + + case 'O': + SetConfigOption("allow_system_table_mods", "true", ctx, gucsource); break; case 'o': + errs++; + break; - /* - * o - send output (stdout and stderr) to the given file - */ + case 'P': + SetConfigOption("ignore_system_indexes", "true", ctx, gucsource); + break; + + case 'p': + SetConfigOption("port", optarg, ctx, gucsource); + break; + + case 'r': + /* send output (stdout and stderr) to the given file */ if (secure) StrNCpy(OutputFileName, optarg, MAXPGPATH); break; - case 'p': - - /* - * p - special flag passed if backend was forked by a - * postmaster. - */ - if (secure) - { - dbname = strdup(optarg); - - secure = false; /* subsequent switches are NOT secure */ - ctx = PGC_BACKEND; - gucsource = PGC_S_CLIENT; - } - break; - case 'S': - - /* - * S - amount of sort memory to use in 1k bytes - */ SetConfigOption("work_mem", optarg, ctx, gucsource); break; case 's': - /* - * s - report usage statistics (timings) after each query - * * Since log options are SUSET, we need to postpone unless * still in secure context */ @@ -2686,35 +2685,13 @@ PostgresMain(int argc, char *argv[], const char *username) ctx, gucsource); break; + case 'T': + /* ignored for consistency with postmaster */ + break; + case 't': - /* --------------- - * tell postgres to report usage statistics (timings) for - * each query - * - * -tpa[rser] = print stats for parser time of each query - * -tpl[anner] = print stats for planner time of each query - * -te[xecutor] = print stats for executor time of each query - * caution: -s can not be used together with -t. - * ---------------- - */ - tmp = NULL; - switch (optarg[0]) - { - case 'p': - if (optarg[1] == 'a') - tmp = "log_parser_stats"; - else if (optarg[1] == 'l') - tmp = "log_planner_stats"; - else - errs++; - break; - case 'e': - tmp = "log_executor_stats"; - break; - default: - errs++; - break; - } + { + const char *tmp = get_stats_option_name(optarg); if (tmp) { if (ctx == PGC_BACKEND) @@ -2722,7 +2699,10 @@ PostgresMain(int argc, char *argv[], const char *username) else SetConfigOption(tmp, "true", ctx, gucsource); } + else + errs++; break; + } case 'v': if (secure) @@ -2730,11 +2710,23 @@ PostgresMain(int argc, char *argv[], const char *username) break; case 'W': + SetConfigOption("post_auth_delay", optarg, ctx, gucsource); + break; + + case 'y': /* - * wait N seconds to allow attach from a debugger + * y - special flag passed if backend was forked by a + * postmaster. */ - pg_usleep(atoi(optarg) * 1000000L); + if (secure) + { + dbname = strdup(optarg); + + secure = false; /* subsequent switches are NOT secure */ + ctx = PGC_BACKEND; + gucsource = PGC_S_CLIENT; + } break; case 'c': @@ -2813,6 +2805,9 @@ PostgresMain(int argc, char *argv[], const char *username) pg_timezone_initialize(); } + if (PostAuthDelay) + pg_usleep(PostAuthDelay * 1000000L); + /* * Set up signal handlers and masks. * diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 9854291df8..216f1c8529 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.233 2005/12/09 01:22:04 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.234 2006/01/05 10:07:46 petere Exp $ * *------------------------------------------------------------------------- */ @@ -551,7 +551,7 @@ RelationBuildRuleLock(Relation relation) * * Note: since we scan the rules using RewriteRelRulenameIndexId, we will * be reading the rules in name order, except possibly during - * emergency-recovery operations (ie, IsIgnoringSystemIndexes). This in + * emergency-recovery operations (ie, IgnoreSystemIndexes). This in * turn ensures that rules will be fired in name order. */ rewrite_desc = heap_open(RewriteRelationId, AccessShareLock); diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 5dd8a62064..f75d013a81 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.152 2006/01/05 03:01:36 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.153 2006/01/05 10:07:46 petere Exp $ * *------------------------------------------------------------------------- */ @@ -62,27 +62,7 @@ static char socketLockFile[MAXPGPATH]; * ---------------------------------------------------------------- */ -static bool isIgnoringSystemIndexes = false; - -/* - * IsIgnoringSystemIndexes - * True if ignoring system indexes. - */ -bool -IsIgnoringSystemIndexes(void) -{ - return isIgnoringSystemIndexes; -} - -/* - * IgnoreSystemIndexes - * Set true or false whether PostgreSQL ignores system indexes. - */ -void -IgnoreSystemIndexes(bool mode) -{ - isIgnoringSystemIndexes = mode; -} +bool IgnoreSystemIndexes = false; /* ---------------------------------------------------------------- * system index reindexing support diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 124d2609b3..ffd49da69e 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.305 2005/12/30 00:13:50 petere Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.306 2006/01/05 10:07:46 petere Exp $ * *-------------------------------------------------------------------- */ @@ -130,6 +130,7 @@ static const char *show_num_temp_buffers(void); static bool assign_phony_autocommit(bool newval, bool doit, GucSource source); static const char *assign_custom_variable_classes(const char *newval, bool doit, GucSource source); +static bool assign_debug_assertions(bool newval, bool doit, GucSource source); static bool assign_ssl(bool newval, bool doit, GucSource source); static bool assign_stage_log_stats(bool newval, bool doit, GucSource source); static bool assign_log_stats(bool newval, bool doit, GucSource source); @@ -316,7 +317,7 @@ const char *const config_group_names[] = /* STATS_COLLECTOR */ gettext_noop("Statistics / Query and Index Statistics Collector"), /* AUTOVACUUM */ - gettext_noop("Auto Vacuum"), + gettext_noop("Autovacuum"), /* CLIENT_CONN */ gettext_noop("Client Connection Defaults"), /* CLIENT_CONN_STATEMENT */ @@ -560,8 +561,6 @@ static struct config_bool ConfigureNamesBool[] = &Log_disconnections, false, NULL, NULL }, - -#ifdef USE_ASSERT_CHECKING { {"debug_assertions", PGC_USERSET, DEVELOPER_OPTIONS, gettext_noop("Turns on various assertion checks."), @@ -569,10 +568,13 @@ static struct config_bool ConfigureNamesBool[] = GUC_NOT_IN_SAMPLE }, &assert_enabled, - true, NULL, NULL - }, +#ifdef USE_ASSERT_CHECKING + true, +#else + false, #endif - + assign_debug_assertions, NULL + }, { /* currently undocumented, so don't show in SHOW ALL */ {"exit_on_error", PGC_USERSET, UNGROUPED, @@ -978,6 +980,27 @@ static struct config_bool ConfigureNamesBool[] = false, NULL, NULL }, + { + {"allow_system_table_mods", PGC_BACKEND, DEVELOPER_OPTIONS, + gettext_noop("Allows modifications of the structure of system tables."), + NULL, + GUC_NOT_IN_SAMPLE + }, + &allowSystemTableMods, + false, NULL, NULL + }, + + { + {"ignore_system_indexes", PGC_BACKEND, DEVELOPER_OPTIONS, + gettext_noop("Disabled reading from system indexes."), + gettext_noop("It does not prevent updating the indexes, so it is safe " + "to use. The worst consequence is slowness."), + GUC_NOT_IN_SAMPLE + }, + &IgnoreSystemIndexes, + false, NULL, NULL + }, + /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL @@ -987,6 +1010,15 @@ static struct config_bool ConfigureNamesBool[] = static struct config_int ConfigureNamesInt[] = { + { + {"post_auth_delay", PGC_BACKEND, DEVELOPER_OPTIONS, + gettext_noop("Waits N seconds on connection startup after authentication."), + gettext_noop("This allows attaching a debugger to the process."), + GUC_NOT_IN_SAMPLE + }, + &PostAuthDelay, + 0, 0, INT_MAX, NULL, NULL + }, { {"default_statistics_target", PGC_USERSET, QUERY_TUNING_OTHER, gettext_noop("Sets the default statistics target."), @@ -5865,6 +5897,18 @@ assign_custom_variable_classes(const char *newval, bool doit, GucSource source) return newval; } +static bool +assign_debug_assertions(bool newval, bool doit, GucSource source) +{ +#ifndef USE_ASSERT_CHECKING + if (newval) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("assertion checking is not supported by this build"))); +#endif + return true; +} + static bool assign_ssl(bool newval, bool doit, GucSource source) { diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 8aecb08a2c..367b3083e0 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * Portions taken from FreeBSD. * - * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.105 2006/01/05 03:01:36 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.106 2006/01/05 10:07:46 petere Exp $ * *------------------------------------------------------------------------- */ @@ -1686,10 +1686,10 @@ setup_sysviews(void) sysviews_setup = readfile(system_views_file); /* - * We use -N here to avoid backslashing stuff in system_views.sql + * We use -j here to avoid backslashing stuff in system_views.sql */ snprintf(cmd, sizeof(cmd), - "\"%s\" %s -N template1 >%s", + "\"%s\" %s -j template1 >%s", backend_exec, backend_options, DEVNULL); @@ -1870,10 +1870,10 @@ setup_schema(void) lines = readfile(info_schema_file); /* - * We use -N here to avoid backslashing stuff in information_schema.sql + * We use -j here to avoid backslashing stuff in information_schema.sql */ snprintf(cmd, sizeof(cmd), - "\"%s\" %s -N template1 >%s", + "\"%s\" %s -j template1 >%s", backend_exec, backend_options, DEVNULL); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index e354b816c2..ce56c22d43 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -13,7 +13,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.184 2005/11/22 18:17:29 momjian Exp $ + * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.185 2006/01/05 10:07:46 petere Exp $ * * NOTES * some of the information in this file should be moved to other files. @@ -306,8 +306,7 @@ extern bool InitPostgres(const char *dbname, const char *username); extern void BaseInit(void); /* in utils/init/miscinit.c */ -extern void IgnoreSystemIndexes(bool mode); -extern bool IsIgnoringSystemIndexes(void); +extern bool IgnoreSystemIndexes; extern void SetReindexProcessing(Oid heapOid, Oid indexOid); extern void ResetReindexProcessing(void); extern bool ReindexIsProcessingHeap(Oid heapOid); diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h index 1f03f546c8..ebcfec2690 100644 --- a/src/include/tcop/tcopprot.h +++ b/src/include/tcop/tcopprot.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.78 2005/10/15 02:49:46 momjian Exp $ + * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.79 2006/01/05 10:07:46 petere Exp $ * * OLD COMMENTS * This file was created so that other c files could get the two @@ -28,6 +28,7 @@ extern CommandDest whereToSendOutput; extern DLLIMPORT const char *debug_query_string; extern int max_stack_depth; +extern int PostAuthDelay; /* GUC-configurable parameters */ @@ -67,5 +68,8 @@ extern void ResetUsage(void); extern void ShowUsage(const char *title); extern void set_debug_options(int debug_flag, GucContext context, GucSource source); +extern bool set_plan_disabling_options(const char *arg, + GucContext context, GucSource source); +extern const char *get_stats_option_name(const char *arg); #endif /* TCOPPROT_H */