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;
167 if (strcmp(argv[1],
"--help") == 0 || strcmp(argv[1],
"-?") == 0)
172 if (strcmp(argv[1],
"--version") == 0 || strcmp(argv[1],
"-V") == 0)
188 if (strcmp(argv[1],
"--describe-config") == 0)
189 do_check_root =
false;
190 else if (argc > 2 && strcmp(argv[1],
"-C") == 0)
191 do_check_root =
false;
205 if (argc > 1 && argv[1][0] ==
'-' && argv[1][1] ==
'-')
208 switch (dispatch_option)
218 SubPostmasterMain(argc, argv);
295 setvbuf(
stdout, NULL, _IONBF, 0);
296 setvbuf(stderr, NULL, _IONBF, 0);
299 err = WSAStartup(MAKEWORD(2, 2), &wsaData);
317#if !defined(__MINGW32__) && !defined(__MINGW64__)
318 _set_abort_behavior(_CALL_REPORTFAULT | _WRITE_ABORT_MSG,
319 _CALL_REPORTFAULT | _WRITE_ABORT_MSG);
334 SetErrorMode(SEM_FAILCRITICALERRORS);
340 _set_error_mode(_OUT_TO_STDERR);
350 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
351 _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
352 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
353 _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
354 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
355 _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
373 elog(
FATAL,
"could not adopt \"%s\" locale nor C locale for %s",
393 printf(
_(
" -B NBUFFERS number of shared buffers\n"));
394 printf(
_(
" -c NAME=VALUE set run-time parameter\n"));
395 printf(
_(
" -C NAME print value of run-time parameter, then exit\n"));
396 printf(
_(
" -d 1-5 debugging level\n"));
397 printf(
_(
" -D DATADIR database directory\n"));
398 printf(
_(
" -e use European date input format (DMY)\n"));
399 printf(
_(
" -F turn fsync off\n"));
400 printf(
_(
" -h HOSTNAME host name or IP address to listen on\n"));
401 printf(
_(
" -i enable TCP/IP connections (deprecated)\n"));
402 printf(
_(
" -k DIRECTORY Unix-domain socket location\n"));
404 printf(
_(
" -l enable SSL connections\n"));
406 printf(
_(
" -N MAX-CONNECT maximum number of allowed connections\n"));
407 printf(
_(
" -p PORT port number to listen on\n"));
408 printf(
_(
" -s show statistics after each query\n"));
409 printf(
_(
" -S WORK-MEM set amount of memory for sorts (in kB)\n"));
410 printf(
_(
" -V, --version output version information, then exit\n"));
411 printf(
_(
" --NAME=VALUE set run-time parameter\n"));
412 printf(
_(
" --describe-config describe configuration parameters, then exit\n"));
413 printf(
_(
" -?, --help show this help, then exit\n"));
415 printf(
_(
"\nDeveloper options:\n"));
416 printf(
_(
" -f s|i|o|b|t|n|m|h forbid use of some plan types\n"));
417 printf(
_(
" -O allow system table structure changes\n"));
418 printf(
_(
" -P disable system indexes\n"));
419 printf(
_(
" -t pa|pl|ex show timings after each query\n"));
420 printf(
_(
" -T send SIGABRT to all backend processes if one dies\n"));
421 printf(
_(
" -W NUM wait NUM seconds to allow attach from a debugger\n"));
423 printf(
_(
"\nOptions for single-user mode:\n"));
424 printf(
_(
" --single selects single-user mode (must be first argument)\n"));
425 printf(
_(
" DBNAME database name (defaults to user name)\n"));
426 printf(
_(
" -d 0-5 override debugging level\n"));
427 printf(
_(
" -E echo statement before execution\n"));
428 printf(
_(
" -j do not use newline as interactive query delimiter\n"));
429 printf(
_(
" -r FILENAME send stdout and stderr to given file\n"));
431 printf(
_(
"\nOptions for bootstrapping mode:\n"));
432 printf(
_(
" --boot selects bootstrapping mode (must be first argument)\n"));
433 printf(
_(
" --check selects check mode (must be first argument)\n"));
434 printf(
_(
" DBNAME database name (mandatory argument in bootstrapping mode)\n"));
435 printf(
_(
" -r FILENAME send stdout and stderr to given file\n"));
437 printf(
_(
"\nPlease read the documentation for the complete list of run-time\n"
438 "configuration settings and how to set them on the command line or in\n"
439 "the configuration file.\n\n"
440 "Report bugs to <%s>.\n"), PACKAGE_BUGREPORT);
441 printf(
_(
"%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
452 write_stderr(
"\"root\" execution of the PostgreSQL server is not permitted.\n"
453 "The server must be started under an unprivileged user ID to prevent\n"
454 "possible system security compromise. See the documentation for\n"
455 "more information on how to properly start the server.\n");
467 if (getuid() != geteuid())
469 write_stderr(
"%s: real and effective user IDs must match\n",
476 write_stderr(
"Execution of PostgreSQL by a user with administrative permissions is not\n"
478 "The server must be started under an unprivileged user ID to prevent\n"
479 "possible system security compromises. See the documentation for\n"
480 "more information on how to properly start the server.\n");
510 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)