跟大多数程序一样,pg的入口函数也是main.c文件中的main函数。
main函数的主要作用是确定当前操作系统平台,根据平台做一些环境变量和内存初始化,然后通过对postgres命令的参数解析,调用对应函数,进入对应流程。
主要流程图:
代码中最主要的部分如下:
if (argc > 1 && strcmp(argv[1], "--boot") == 0)
AuxiliaryProcessMain(argc, argv); /* does not return */
else if (argc > 1 && strcmp(argv[1], "--describe-config") == 0)
GucInfoMain(); /* does not return */
else if (argc > 1 && strcmp(argv[1], "--single") == 0)
PostgresMain(argc, argv,
NULL, /* no dbname */
strdup(get_user_name_or_exit(progname))); /* does not return */
else
PostmasterMain(argc, argv); /* does not return */
其中最核心的就是PostmasterMain程序,我们后面再看。
参考
《PostgreSQL数据库内核分析》第二章