diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2006-01-05 10:07:46 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2006-01-05 10:07:46 +0000 |
commit | 86c23a6eb28b0588644dcefeb33ef5a2aa8b9453 (patch) | |
tree | d0497d119ef7cf861fc046c58326a42e47c16c39 /src/backend/tcop/postgres.c | |
parent | 4e1712ea5499ad57d825eefa08e560dad715300c (diff) | |
download | postgresql-86c23a6eb28b0588644dcefeb33ef5a2aa8b9453.tar.gz postgresql-86c23a6eb28b0588644dcefeb33ef5a2aa8b9453.zip |
Make all command-line options of postmaster and postgres the same. See
http://archives.postgresql.org/pgsql-hackers/2006-01/msg00151.php for the
complete plan.
Diffstat (limited to 'src/backend/tcop/postgres.c')
-rw-r--r-- | src/backend/tcop/postgres.c | 271 |
1 files changed, 133 insertions, 138 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 8f28ce6d020..e38e66a38cb 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 <pgsql-bugs@postgresql.org>.\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': + if (!set_plan_disabling_options(optarg, ctx, gucsource)) + errs++; + break; - /* - * 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); + case 'h': + SetConfigOption("listen_addresses", optarg, ctx, gucsource); break; - case 'N': + case 'i': + SetConfigOption("listen_addresses", "*", ctx, gucsource); + break; - /* - * N - Don't use newline as a query delimiter - */ + case 'j': UseNewLine = 0; break; - case 'O': + case 'k': + SetConfigOption("unix_socket_directory", optarg, ctx, gucsource); + break; - /* - * allow system table structure modifications - */ - if (secure) /* XXX safe to allow from client??? */ - allowSystemTableMods = true; + case 'l': + SetConfigOption("ssl", "true", ctx, gucsource); break; - case 'P': + case 'N': + SetConfigOption("max_connections", optarg, 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': + /* 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 - */ - if (secure) - StrNCpy(OutputFileName, optarg, MAXPGPATH); + case 'P': + SetConfigOption("ignore_system_indexes", "true", ctx, gucsource); break; case 'p': + SetConfigOption("port", optarg, ctx, gucsource); + break; - /* - * p - special flag passed if backend was forked by a - * postmaster. - */ + case 'r': + /* send output (stdout and stderr) to the given file */ if (secure) - { - dbname = strdup(optarg); - - secure = false; /* subsequent switches are NOT secure */ - ctx = PGC_BACKEND; - gucsource = PGC_S_CLIENT; - } + StrNCpy(OutputFileName, optarg, MAXPGPATH); 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. * |