diff options
author | Peter Eisentraut | 2006-06-18 15:38:37 +0000 |
---|---|---|
committer | Peter Eisentraut | 2006-06-18 15:38:37 +0000 |
commit | 5266f221a2e1358cc2bb208b3d25e9dec427c757 (patch) | |
tree | ec47ab08bfec7e030aeac526cc3e8c38d4339ea1 /src/backend | |
parent | 44cb3ae7efb9a2fe197a2a0287e919343f31f6d5 (diff) |
Merge postmaster and postgres command into just postgres. postmaster
symlink is kept for now for compatibility. To call single-user mode, use
postgres --single.
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/Makefile | 4 | ||||
-rw-r--r-- | src/backend/bootstrap/bootstrap.c | 36 | ||||
-rw-r--r-- | src/backend/main/main.c | 401 | ||||
-rw-r--r-- | src/backend/postmaster/autovacuum.c | 4 | ||||
-rw-r--r-- | src/backend/postmaster/pgarch.c | 4 | ||||
-rw-r--r-- | src/backend/postmaster/pgstat.c | 6 | ||||
-rw-r--r-- | src/backend/postmaster/postmaster.c | 109 | ||||
-rw-r--r-- | src/backend/postmaster/syslogger.c | 4 | ||||
-rw-r--r-- | src/backend/tcop/postgres.c | 62 |
9 files changed, 285 insertions, 345 deletions
diff --git a/src/backend/Makefile b/src/backend/Makefile index e97e7b33aa7..eeead6c0260 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -4,11 +4,11 @@ # # Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/backend/Makefile,v 1.114 2006/01/05 01:56:29 momjian Exp $ +# $PostgreSQL: pgsql/src/backend/Makefile,v 1.115 2006/06/18 15:38:36 petere Exp $ # #------------------------------------------------------------------------- -PGFILEDESC = "PostgreSQL Database Backend" +PGFILEDESC = "PostgreSQL Server" subdir = src/backend top_builddir = ../.. include $(top_builddir)/src/Makefile.global diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index bc60d533ae4..8acac3ad449 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.216 2006/06/08 23:55:48 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.217 2006/06/18 15:38:36 petere Exp $ * *------------------------------------------------------------------------- */ @@ -53,7 +53,6 @@ extern char *optarg; #define ALLOC(t, c) ((t *) calloc((unsigned)(c), sizeof(t))) -static void usage(void); static void bootstrap_signals(void); static void ShutdownDummyProcess(int code, Datum arg); static hashnode *AddStr(char *str, int strlength, int mderef); @@ -247,8 +246,8 @@ BootstrapMain(int argc, char *argv[]) if (!IsUnderPostmaster) InitializeGUCOptions(); - /* Ignore the initial -boot argument, if present */ - if (argc > 1 && strcmp(argv[1], "-boot") == 0) + /* Ignore the initial --boot argument, if present */ + if (argc > 1 && strcmp(argv[1], "--boot") == 0) { argv++; argc--; @@ -317,7 +316,9 @@ BootstrapMain(int argc, char *argv[]) break; } default: - usage(); + write_stderr("Try \"%s --help\" for more information.\n", + progname); + proc_exit(1); break; } } @@ -328,7 +329,10 @@ BootstrapMain(int argc, char *argv[]) optind++; } if (!dbname || argc != optind) - usage(); + { + write_stderr("%s: invalid command-line arguments\n", progname); + proc_exit(1); + } /* * Identify myself via ps @@ -498,26 +502,6 @@ BootstrapMain(int argc, char *argv[]) * ---------------------------------------------------------------- */ -/* usage: - * usage help for the bootstrap backend - */ -static void -usage(void) -{ - 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); -} - /* * Set up signal handling for a bootstrap process */ diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 37b77206347..60c46d39a23 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.102 2006/06/12 16:17:20 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.103 2006/06/18 15:38:37 petere Exp $ * *------------------------------------------------------------------------- */ @@ -29,6 +29,7 @@ #include <sys/proc.h> #undef ASSEMBLER #endif + #if defined(__NetBSD__) #include <sys/param.h> #endif @@ -45,88 +46,26 @@ #include "libpq/pqsignal.h" #endif + const char *progname; -int -main(int argc, char *argv[]) -{ -#ifndef WIN32 - struct passwd *pw; -#endif - char *pw_name_persist; - /* - * Place platform-specific startup hacks here. This is the right place to - * put code that must be executed early in launch of either a postmaster, - * a standalone backend, or a standalone bootstrap run. Note that this - * code will NOT be executed when a backend or sub-bootstrap run is forked - * by the postmaster. - * - * XXX The need for code here is proof that the platform in question is - * too brain-dead to provide a standard C execution environment without - * help. Avoid adding more here, if you can. - */ +static void startup_hacks(const char *progname); +static void help(const char *progname); +static void check_root(const char *progname); +static char *get_current_username(const char *progname); -#if defined(__alpha) /* no __alpha__ ? */ -#ifdef NOFIXADE - int buffer[] = {SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT}; -#endif -#endif /* __alpha */ -#ifdef WIN32 - char *env_locale; -#endif +int +main(int argc, char *argv[]) +{ progname = get_progname(argv[0]); /* - * On some platforms, unaligned memory accesses result in a kernel trap; - * the default kernel behavior is to emulate the memory access, but this - * results in a significant performance penalty. We ought to fix PG not to - * make such unaligned memory accesses, so this code disables the kernel - * emulation: unaligned accesses will result in SIGBUS instead. - */ -#ifdef NOFIXADE - -#if defined(ultrix4) - syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL); -#endif - -#if defined(__alpha) /* no __alpha__ ? */ - if (setsysinfo(SSI_NVPAIRS, buffer, 1, (caddr_t) NULL, - (unsigned long) NULL) < 0) - write_stderr("%s: setsysinfo failed: %s\n", - argv[0], strerror(errno)); -#endif -#endif /* NOFIXADE */ - -#if defined(WIN32) - { - WSADATA wsaData; - int err; - - /* Make output streams unbuffered by default */ - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - - /* Prepare Winsock */ - err = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (err != 0) - { - write_stderr("%s: WSAStartup failed: %d\n", - argv[0], err); - exit(1); - } - - /* In case of general protection fault, don't show GUI popup box */ - SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); - } -#endif - - /* - * Not-quite-so-platform-specific startup environment checks. Still best - * to minimize these. + * Platform-specific startup hacks */ + startup_hacks(progname); /* * Remember the physical location of the initially given argv[] array for @@ -153,23 +92,25 @@ main(int argc, char *argv[]) set_pglocale_pgservice(argv[0], "postgres"); #ifdef WIN32 - /* * Windows uses codepages rather than the environment, so we work around * that by querying the environment explicitly first for LC_COLLATE and * LC_CTYPE. We have to do this because initdb passes those values in the * environment. If there is nothing there we fall back on the codepage. */ + { + char *env_locale; - if ((env_locale = getenv("LC_COLLATE")) != NULL) - pg_perm_setlocale(LC_COLLATE, env_locale); - else - pg_perm_setlocale(LC_COLLATE, ""); + if ((env_locale = getenv("LC_COLLATE")) != NULL) + pg_perm_setlocale(LC_COLLATE, env_locale); + else + pg_perm_setlocale(LC_COLLATE, ""); - if ((env_locale = getenv("LC_CTYPE")) != NULL) - pg_perm_setlocale(LC_CTYPE, env_locale); - else - pg_perm_setlocale(LC_CTYPE, ""); + if ((env_locale = getenv("LC_CTYPE")) != NULL) + pg_perm_setlocale(LC_CTYPE, env_locale); + else + pg_perm_setlocale(LC_CTYPE, ""); + } #else pg_perm_setlocale(LC_COLLATE, ""); pg_perm_setlocale(LC_CTYPE, ""); @@ -195,80 +136,38 @@ main(int argc, char *argv[]) unsetenv("LC_ALL"); /* - * Skip permission checks if we're just trying to do --help or --version; - * otherwise root will get unhelpful failure messages from initdb. + * Catch standard options before doing much else */ - if (!(argc > 1 - && (strcmp(argv[1], "--help") == 0 || - strcmp(argv[1], "-?") == 0 || - strcmp(argv[1], "--version") == 0 || - strcmp(argv[1], "-V") == 0))) + if (argc > 1) { -#ifndef WIN32 - /* - * Make sure we are not running as root. - */ - if (geteuid() == 0) - { - write_stderr("\"root\" execution of the PostgreSQL server is not permitted.\n" - "The server must be started under an unprivileged user ID to prevent\n" - "possible system security compromise. See the documentation for\n" - "more information on how to properly start the server.\n"); - exit(1); - } - - /* - * Also make sure that real and effective uids are the same. Executing - * Postgres as a setuid program from a root shell is a security hole, - * since on many platforms a nefarious subroutine could setuid back to - * root if real uid is root. (Since nobody actually uses Postgres as - * a setuid program, trying to actively fix this situation seems more - * trouble than it's worth; we'll just expend the effort to check for - * it.) - */ - if (getuid() != geteuid()) + if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { - write_stderr("%s: real and effective user IDs must match\n", - argv[0]); - exit(1); + help(progname); + exit(0); } -#else /* WIN32 */ - if (pgwin32_is_admin()) + if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) { - write_stderr("Execution of PostgreSQL by a user with administrative permissions is not\n" - "permitted.\n" - "The server must be started under an unprivileged user ID to prevent\n" - "possible system security compromises. See the documentation for\n" - "more information on how to properly start the server.\n"); - exit(1); + puts("postgres (PostgreSQL) " PG_VERSION); + exit(0); } -#endif /* !WIN32 */ } /* - * Now dispatch to one of PostmasterMain, PostgresMain, GucInfoMain, - * SubPostmasterMain, or BootstrapMain depending on the program name (and - * possibly first argument) we were called with. The lack of consistency - * here is historical. + * Make sure we are not running as root. */ - if (strcmp(progname, "postmaster") == 0) - { - /* Called as "postmaster" */ - exit(PostmasterMain(argc, argv)); - } + check_root(progname); /* - * If the first argument begins with "-fork", then invoke - * SubPostmasterMain. This is used for forking postmaster child processes - * on systems where we can't simply fork. + * Dispatch to one of various subprograms depending on first + * argument. */ + #ifdef EXEC_BACKEND - if (argc > 1 && strncmp(argv[1], "-fork", 5) == 0) + if (argc > 1 && strncmp(argv[1], "--fork", 6) == 0) exit(SubPostmasterMain(argc, argv)); #endif #ifdef WIN32 - /* * Start our win32 signal implementation * @@ -278,47 +177,223 @@ main(int argc, char *argv[]) pgwin32_signal_initialize(); #endif - /* - * If the first argument is "-boot", then invoke bootstrap mode. (This - * path is taken only for a standalone bootstrap process.) - */ - if (argc > 1 && strcmp(argv[1], "-boot") == 0) + if (argc > 1 && strcmp(argv[1], "--boot") == 0) exit(BootstrapMain(argc, argv)); - /* - * If the first argument is "--describe-config", then invoke runtime - * configuration option display mode. - */ if (argc > 1 && strcmp(argv[1], "--describe-config") == 0) exit(GucInfoMain()); + if (argc > 1 && strcmp(argv[1], "--single") == 0) + exit(PostgresMain(argc, argv, get_current_username(progname))); + + exit(PostmasterMain(argc, argv)); +} + + + +/* + * Place platform-specific startup hacks here. This is the right + * place to put code that must be executed early in launch of either a + * postmaster, a standalone backend, or a standalone bootstrap run. + * Note that this code will NOT be executed when a backend or + * sub-bootstrap run is forked by the server. + * + * XXX The need for code here is proof that the platform in question + * is too brain-dead to provide a standard C execution environment + * without help. Avoid adding more here, if you can. + */ +static void +startup_hacks(const char *progname) +{ +#if defined(__alpha) /* no __alpha__ ? */ +#ifdef NOFIXADE + int buffer[] = {SSIN_UACPROC, UAC_SIGBUS | UAC_NOPRINT}; +#endif +#endif /* __alpha */ + + + /* + * On some platforms, unaligned memory accesses result in a kernel + * trap; the default kernel behavior is to emulate the memory + * access, but this results in a significant performance penalty. + * We ought to fix PG not to make such unaligned memory accesses, + * so this code disables the kernel emulation: unaligned accesses + * will result in SIGBUS instead. + */ +#ifdef NOFIXADE + +#if defined(ultrix4) + syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL); +#endif + +#if defined(__alpha) /* no __alpha__ ? */ + if (setsysinfo(SSI_NVPAIRS, buffer, 1, (caddr_t) NULL, + (unsigned long) NULL) < 0) + write_stderr("%s: setsysinfo failed: %s\n", + progname, strerror(errno)); +#endif + +#endif /* NOFIXADE */ + + +#ifdef WIN32 + { + WSADATA wsaData; + int err; + + /* Make output streams unbuffered by default */ + setvbuf(stdout, NULL, _IONBF, 0); + setvbuf(stderr, NULL, _IONBF, 0); + + /* Prepare Winsock */ + err = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (err != 0) + { + write_stderr("%s: WSAStartup failed: %d\n", + progname, err); + exit(1); + } + + /* In case of general protection fault, don't show GUI popup box */ + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); + } +#endif /* WIN32 */ +} + + + +static void +help(const char *progname) +{ + printf(_("%s is the PostgreSQL server.\n\n"), progname); + printf(_("Usage:\n %s [OPTION]...\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 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")); + printf(_(" -k DIRECTORY Unix-domain socket location\n")); +#ifdef USE_SSL + 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 (obsolete)\n")); + printf(_(" -p PORT port number to listen on\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(_(" -n do not reinitialize shared memory after abnormal exit\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(_("\nOptions for single-user mode:\n")); + printf(_(" --single selects single-user mode (must be first argument)\n")); + printf(_(" DBNAME database name (defaults to user name)\n")); + printf(_(" -d 0-5 override debugging level\n")); + printf(_(" -E echo statement before execution\n")); + printf(_(" -j do not use newline as interactive query delimiter\n")); + printf(_(" -r FILENAME send stdout and stderr to given file\n")); + + printf(_("\nOptions for bootstrapping mode:\n")); + printf(_(" --boot selects bootstrapping mode (must be first argument)\n")); + printf(_(" DBNAME database name (mandatory argument in bootstrapping mode)\n")); + printf(_(" -r FILENAME send stdout and stderr to given file\n")); + printf(_(" -x NUM internal use\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" + "the configuration file.\n\n" + "Report bugs to <pgsql-bugs@postgresql.org>.\n")); +} + + + +static void +check_root(const char *progname) +{ +#ifndef WIN32 + if (geteuid() == 0) + { + write_stderr("\"root\" execution of the PostgreSQL server is not permitted.\n" + "The server must be started under an unprivileged user ID to prevent\n" + "possible system security compromise. See the documentation for\n" + "more information on how to properly start the server.\n"); + exit(1); + } + /* - * Otherwise we're a standalone backend. Invoke PostgresMain, specifying - * current userid as the "authenticated" Postgres user name. + * Also make sure that real and effective uids are the same. + * Executing as a setuid program from a root shell is a security + * hole, since on many platforms a nefarious subroutine could + * setuid back to root if real uid is root. (Since nobody + * actually uses postgres as a setuid program, trying to + * actively fix this situation seems more trouble than it's worth; + * we'll just expend the effort to check for it.) */ + if (getuid() != geteuid()) + { + write_stderr("%s: real and effective user IDs must match\n", + progname); + exit(1); + } +#else /* WIN32 */ + if (pgwin32_is_admin()) + { + write_stderr("Execution of PostgreSQL by a user with administrative permissions is not\n" + "permitted.\n" + "The server must be started under an unprivileged user ID to prevent\n" + "possible system security compromises. See the documentation for\n" + "more information on how to properly start the server.\n"); + exit(1); + } +#endif /* WIN32 */ +} + + + +static char * +get_current_username(const char *progname) +{ #ifndef WIN32 + struct passwd *pw; + pw = getpwuid(geteuid()); if (pw == NULL) { write_stderr("%s: invalid effective UID: %d\n", - argv[0], (int) geteuid()); + progname, (int) geteuid()); exit(1); } - /* Allocate new memory because later getpwuid() calls can overwrite it */ - pw_name_persist = strdup(pw->pw_name); + /* Allocate new memory because later getpwuid() calls can overwrite it. */ + return strdup(pw->pw_name); #else - { - long namesize = 256 /* UNLEN */ + 1; + long namesize = 256 /* UNLEN */ + 1; + char *name; - pw_name_persist = malloc(namesize); - if (!GetUserName(pw_name_persist, &namesize)) - { - write_stderr("%s: could not determine user name (GetUserName failed)\n", - argv[0]); - exit(1); - } + name = malloc(namesize); + if (!GetUserName(name, &namesize)) + { + write_stderr("%s: could not determine user name (GetUserName failed)\n", + progname); + exit(1); } -#endif /* WIN32 */ - exit(PostgresMain(argc, argv, pw_name_persist)); + return name; +#endif } diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 820f4458665..93ba5c2c989 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.19 2006/05/19 15:15:37 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.20 2006/06/18 15:38:37 petere Exp $ * *------------------------------------------------------------------------- */ @@ -208,7 +208,7 @@ autovac_forkexec(void) int ac = 0; av[ac++] = "postgres"; - av[ac++] = "-forkautovac"; + av[ac++] = "--forkautovac"; av[ac++] = NULL; /* filled in by postmaster_forkexec */ av[ac] = NULL; diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 9a8f24e5dbb..538ba0c3ec6 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -19,7 +19,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.22 2006/05/30 17:08:14 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.23 2006/06/18 15:38:37 petere Exp $ * *------------------------------------------------------------------------- */ @@ -197,7 +197,7 @@ pgarch_forkexec(void) av[ac++] = "postgres"; - av[ac++] = "-forkarch"; + av[ac++] = "--forkarch"; av[ac++] = NULL; /* filled in by postmaster_forkexec */ diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index df286614020..50486f8cef2 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -13,7 +13,7 @@ * * Copyright (c) 2001-2006, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.127 2006/05/30 02:35:39 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.128 2006/06/18 15:38:37 petere Exp $ * ---------- */ #include "postgres.h" @@ -491,11 +491,11 @@ pgstat_forkexec(STATS_PROCESS_TYPE procType) switch (procType) { case STAT_PROC_BUFFER: - av[ac++] = "-forkbuf"; + av[ac++] = "--forkbuf"; break; case STAT_PROC_COLLECTOR: - av[ac++] = "-forkcol"; + av[ac++] = "--forkcol"; break; default: diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 0fa564a8f51..fc4a9bcdc33 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.485 2006/06/07 22:24:44 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.486 2006/06/18 15:38:37 petere Exp $ * * NOTES * @@ -266,7 +266,6 @@ static void LogChildExit(int lev, const char *procname, static void BackendInitialize(Port *port); static int BackendRun(Port *port); static void ExitPostmaster(int status); -static void usage(const char *); static int ServerLoop(void); static int BackendStartup(Port *port); static int ProcessStartupPacket(Port *port, bool SSLdone); @@ -385,29 +384,6 @@ PostmasterMain(int argc, char *argv[]) IsPostmasterEnvironment = true; /* - * Catch standard options before doing much else. This even works on - * systems without getopt_long. - */ - if (argc > 1) - { - if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) - { - usage(progname); - ExitPostmaster(0); - } - if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) - { - puts("postmaster (PostgreSQL) " PG_VERSION); - ExitPostmaster(0); - } - } - -#ifdef WIN32 - /* Start our win32 signal implementation */ - pgwin32_signal_initialize(); -#endif - - /* * for security, no dir or file created can be group or other accessible */ umask((mode_t) 0077); @@ -1134,55 +1110,6 @@ pmdaemonize(void) /* - * Print out help message - */ -static void -usage(const char *progname) -{ - printf(_("%s is the PostgreSQL server.\n\n"), progname); - printf(_("Usage:\n %s [OPTION]...\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 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")); - printf(_(" -k DIRECTORY Unix-domain socket location\n")); -#ifdef USE_SSL - 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 (obsolete)\n")); - printf(_(" -p PORT port number to listen on\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(_(" -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" - "the configuration file.\n\n" - "Report bugs to <pgsql-bugs@postgresql.org>.\n")); -} - - -/* * Main idle loop of postmaster */ static int @@ -2957,7 +2884,7 @@ backend_forkexec(Port *port) int ac = 0; av[ac++] = "postgres"; - av[ac++] = "-forkbackend"; + av[ac++] = "--forkbackend"; av[ac++] = NULL; /* filled in by internal_forkexec */ av[ac] = NULL; @@ -3030,10 +2957,10 @@ internal_forkexec(int argc, char *argv[], Port *port) /* Make sure caller set up argv properly */ Assert(argc >= 3); Assert(argv[argc] == NULL); - Assert(strncmp(argv[1], "-fork", 5) == 0); + Assert(strncmp(argv[1], "--fork", 6) == 0); Assert(argv[2] == NULL); - /* Insert temp file name after -fork argument */ + /* Insert temp file name after --fork argument */ argv[2] = tmpfilename; /* Fire off execv in child */ @@ -3081,7 +3008,7 @@ internal_forkexec(int argc, char *argv[], Port *port) /* Make sure caller set up argv properly */ Assert(argc >= 3); Assert(argv[argc] == NULL); - Assert(strncmp(argv[1], "-fork", 5) == 0); + Assert(strncmp(argv[1], "--fork", 6) == 0); Assert(argv[2] == NULL); /* Verify that there is room in the child list */ @@ -3119,7 +3046,7 @@ internal_forkexec(int argc, char *argv[], Port *port) return -1; } - /* Insert temp file name after -fork argument */ + /* Insert temp file name after --fork argument */ sprintf(paramHandleStr, "%lu", (DWORD) paramHandle); argv[2] = paramHandleStr; @@ -3242,7 +3169,7 @@ internal_forkexec(int argc, char *argv[], Port *port) * to what it would be if we'd simply forked on Unix, and then * dispatch to the appropriate place. * - * The first two command line arguments are expected to be "-forkFOO" + * The first two command line arguments are expected to be "--forkFOO" * (where FOO indicates which postmaster child we are to become), and * the name of a variables file that we can read to load data that would * have been inherited by fork() on Unix. Remaining arguments go to the @@ -3282,9 +3209,9 @@ SubPostmasterMain(int argc, char *argv[]) * to do this before going any further to ensure that we can attach at the * same address the postmaster used. */ - if (strcmp(argv[1], "-forkbackend") == 0 || - strcmp(argv[1], "-forkautovac") == 0 || - strcmp(argv[1], "-forkboot") == 0) + if (strcmp(argv[1], "--forkbackend") == 0 || + strcmp(argv[1], "--forkautovac") == 0 || + strcmp(argv[1], "--forkboot") == 0) PGSharedMemoryReAttach(); /* @@ -3304,7 +3231,7 @@ SubPostmasterMain(int argc, char *argv[]) read_nondefault_variables(); /* Run backend or appropriate child */ - if (strcmp(argv[1], "-forkbackend") == 0) + if (strcmp(argv[1], "--forkbackend") == 0) { Assert(argc == 3); /* shouldn't be any more args */ @@ -3356,7 +3283,7 @@ SubPostmasterMain(int argc, char *argv[]) /* And run the backend */ proc_exit(BackendRun(&port)); } - if (strcmp(argv[1], "-forkboot") == 0) + if (strcmp(argv[1], "--forkboot") == 0) { /* Close the postmaster's sockets */ ClosePostmasterPorts(false); @@ -3373,7 +3300,7 @@ SubPostmasterMain(int argc, char *argv[]) BootstrapMain(argc - 2, argv + 2); proc_exit(0); } - if (strcmp(argv[1], "-forkautovac") == 0) + if (strcmp(argv[1], "--forkautovac") == 0) { /* Close the postmaster's sockets */ ClosePostmasterPorts(false); @@ -3390,7 +3317,7 @@ SubPostmasterMain(int argc, char *argv[]) AutoVacMain(argc - 2, argv + 2); proc_exit(0); } - if (strcmp(argv[1], "-forkarch") == 0) + if (strcmp(argv[1], "--forkarch") == 0) { /* Close the postmaster's sockets */ ClosePostmasterPorts(false); @@ -3400,7 +3327,7 @@ SubPostmasterMain(int argc, char *argv[]) PgArchiverMain(argc, argv); proc_exit(0); } - if (strcmp(argv[1], "-forkbuf") == 0) + if (strcmp(argv[1], "--forkbuf") == 0) { /* Close the postmaster's sockets */ ClosePostmasterPorts(false); @@ -3410,7 +3337,7 @@ SubPostmasterMain(int argc, char *argv[]) PgstatBufferMain(argc, argv); proc_exit(0); } - if (strcmp(argv[1], "-forkcol") == 0) + if (strcmp(argv[1], "--forkcol") == 0) { /* * Do NOT close postmaster sockets here, because we are forking from @@ -3422,7 +3349,7 @@ SubPostmasterMain(int argc, char *argv[]) PgstatCollectorMain(argc, argv); proc_exit(0); } - if (strcmp(argv[1], "-forklog") == 0) + if (strcmp(argv[1], "--forklog") == 0) { /* Close the postmaster's sockets */ ClosePostmasterPorts(true); @@ -3635,7 +3562,7 @@ StartChildProcess(int xlop) av[ac++] = "postgres"; #ifdef EXEC_BACKEND - av[ac++] = "-forkboot"; + av[ac++] = "--forkboot"; av[ac++] = NULL; /* filled in by postmaster_forkexec */ #endif diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 339f4605af2..899dcad1f7a 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -18,7 +18,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.24 2006/06/07 22:24:44 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.25 2006/06/18 15:38:37 petere Exp $ * *------------------------------------------------------------------------- */ @@ -534,7 +534,7 @@ syslogger_forkexec(void) char numbuf[2][32]; av[ac++] = "postgres"; - av[ac++] = "-forklog"; + av[ac++] = "--forklog"; av[ac++] = NULL; /* filled in by postmaster_forkexec */ /* static variables (those not passed by write_backend_variables) */ diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index a43478088f9..b7c363d80cd 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.487 2006/06/11 15:49:28 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.488 2006/06/18 15:38:37 petere Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -2399,41 +2399,6 @@ assign_max_stack_depth(int newval, bool doit, GucSource source) } -static void -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(_("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\n")); - printf(_(" -D DATADIR database directory\n")); - printf(_(" -e use European date input format (DMY)\n")); - printf(_(" -E echo statement before execution\n")); - printf(_(" -F turn fsync off\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(_(" -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")); -} - - /* * set_debug_options --- apply "-d N" command line option * @@ -2564,24 +2529,6 @@ PostgresMain(int argc, char *argv[], const char *username) guc_values = lappend(guc_values, pstrdup(val))) /* - * Catch standard options before doing much else. This even works on - * systems without getopt_long. - */ - if (!IsUnderPostmaster && argc > 1) - { - if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) - { - usage(argv[0]); - exit(0); - } - if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) - { - puts(PG_VERSIONSTR); - exit(0); - } - } - - /* * initialize globals (already done if under postmaster, but not if * standalone; cheap enough to do over) */ @@ -2638,6 +2585,13 @@ PostgresMain(int argc, char *argv[], const char *username) * ---------------- */ + /* Ignore the initial --single argument, if present */ + if (argc > 1 && strcmp(argv[1], "--single") == 0) + { + argv++; + argc--; + } + /* all options are allowed until '-p' */ secure = true; ctx = PGC_POSTMASTER; |