29#if defined(__NetBSD__)
59 "array length mismatch");
62static void init_locale(
const char *categoryname,
int category,
const char *
locale);
71main(
int argc,
char *argv[])
73 bool do_check_root =
true;
163 if (strcmp(argv[1],
"--help") == 0 || strcmp(argv[1],
"-?") == 0)
168 if (strcmp(argv[1],
"--version") == 0 || strcmp(argv[1],
"-V") == 0)
184 if (strcmp(argv[1],
"--describe-config") == 0)
185 do_check_root =
false;
186 else if (argc > 2 && strcmp(argv[1],
"-C") == 0)
187 do_check_root =
false;
201 if (argc > 1 && argv[1][0] ==
'-' && argv[1][1] ==
'-')
204 switch (dispatch_option)
214 SubPostmasterMain(argc, argv);
291 setvbuf(
stdout, NULL, _IONBF, 0);
292 setvbuf(stderr, NULL, _IONBF, 0);
295 err = WSAStartup(MAKEWORD(2, 2), &wsaData);
313#if !defined(__MINGW32__) && !defined(__MINGW64__)
314 _set_abort_behavior(_CALL_REPORTFAULT | _WRITE_ABORT_MSG,
315 _CALL_REPORTFAULT | _WRITE_ABORT_MSG);
330 SetErrorMode(SEM_FAILCRITICALERRORS);
336 _set_error_mode(_OUT_TO_STDERR);
346 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
347 _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
348 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
349 _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
350 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
351 _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
369 elog(
FATAL,
"could not adopt \"%s\" locale nor C locale for %s",
389 printf(
_(
" -B NBUFFERS number of shared buffers\n"));
390 printf(
_(
" -c NAME=VALUE set run-time parameter\n"));
391 printf(
_(
" -C NAME print value of run-time parameter, then exit\n"));
392 printf(
_(
" -d 1-5 debugging level\n"));
393 printf(
_(
" -D DATADIR database directory\n"));
394 printf(
_(
" -e use European date input format (DMY)\n"));
395 printf(
_(
" -F turn fsync off\n"));
396 printf(
_(
" -h HOSTNAME host name or IP address to listen on\n"));
397 printf(
_(
" -i enable TCP/IP connections (deprecated)\n"));
398 printf(
_(
" -k DIRECTORY Unix-domain socket location\n"));
400 printf(
_(
" -l enable SSL connections\n"));
402 printf(
_(
" -N MAX-CONNECT maximum number of allowed connections\n"));
403 printf(
_(
" -p PORT port number to listen on\n"));
404 printf(
_(
" -s show statistics after each query\n"));
405 printf(
_(
" -S WORK-MEM set amount of memory for sorts (in kB)\n"));
406 printf(
_(
" -V, --version output version information, then exit\n"));
407 printf(
_(
" --NAME=VALUE set run-time parameter\n"));
408 printf(
_(
" --describe-config describe configuration parameters, then exit\n"));
409 printf(
_(
" -?, --help show this help, then exit\n"));
411 printf(
_(
"\nDeveloper options:\n"));
412 printf(
_(
" -f s|i|o|b|t|n|m|h forbid use of some plan types\n"));
413 printf(
_(
" -O allow system table structure changes\n"));
414 printf(
_(
" -P disable system indexes\n"));
415 printf(
_(
" -t pa|pl|ex show timings after each query\n"));
416 printf(
_(
" -T send SIGABRT to all backend processes if one dies\n"));
417 printf(
_(
" -W NUM wait NUM seconds to allow attach from a debugger\n"));
419 printf(
_(
"\nOptions for single-user mode:\n"));
420 printf(
_(
" --single selects single-user mode (must be first argument)\n"));
421 printf(
_(
" DBNAME database name (defaults to user name)\n"));
422 printf(
_(
" -d 0-5 override debugging level\n"));
423 printf(
_(
" -E echo statement before execution\n"));
424 printf(
_(
" -j do not use newline as interactive query delimiter\n"));
425 printf(
_(
" -r FILENAME send stdout and stderr to given file\n"));
427 printf(
_(
"\nOptions for bootstrapping mode:\n"));
428 printf(
_(
" --boot selects bootstrapping mode (must be first argument)\n"));
429 printf(
_(
" --check selects check mode (must be first argument)\n"));
430 printf(
_(
" DBNAME database name (mandatory argument in bootstrapping mode)\n"));
431 printf(
_(
" -r FILENAME send stdout and stderr to given file\n"));
433 printf(
_(
"\nPlease read the documentation for the complete list of run-time\n"
434 "configuration settings and how to set them on the command line or in\n"
435 "the configuration file.\n\n"
436 "Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
437 printf(
_(
"%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
448 write_stderr(
"\"root\" execution of the PostgreSQL server is not permitted.\n"
449 "The server must be started under an unprivileged user ID to prevent\n"
450 "possible system security compromise. See the documentation for\n"
451 "more information on how to properly start the server.\n");
463 if (getuid() != geteuid())
465 write_stderr(
"%s: real and effective user IDs must match\n",
472 write_stderr(
"Execution of PostgreSQL by a user with administrative permissions is not\n"
474 "The server must be started under an unprivileged user ID to prevent\n"
475 "possible system security compromises. See the documentation for\n"
476 "more information on how to properly start the server.\n");
506 return getenv(
"UBSAN_OPTIONS");
#define write_stderr(str)
void BootstrapModeMain(int argc, char *argv[], bool check_only)
#define PG_TEXTDOMAIN(domain)
void set_pglocale_pgservice(const char *argv0, const char *app)
void pgwin32_install_crashdump_handler(void)
void err(int eval, const char *fmt,...)
Assert(PointerIsAligned(start, uint64))
static void init_locale(const char *categoryname, int category, const char *locale)
static void check_root(const char *progname)
int main(int argc, char *argv[])
const char * __ubsan_default_options(void)
static void help(const char *progname)
StaticAssertDecl(lengthof(DispatchOptionNames)==DISPATCH_POSTMASTER, "array length mismatch")
static void startup_hacks(const char *progname)
static const char *const DispatchOptionNames[]
DispatchOption parse_dispatch_option(const char *name)
void MemoryContextInit(void)
char * pg_perm_setlocale(int category, const char *locale)
#define PG_BACKEND_VERSIONSTR
const char * get_progname(const char *argv0)
void PostgresSingleUserMain(int argc, char *argv[], const char *username)
void PostmasterMain(int argc, char *argv[])
@ DISPATCH_DESCRIBE_CONFIG
char ** save_ps_display_args(int argc, char **argv)
pg_stack_base_t set_stack_base(void)
const char * get_user_name_or_exit(const char *progname)
int pgwin32_is_admin(void)