跟大多数程序一样,pg的入口函数也是main.c文件中的main函数。

main函数的主要作用是确定当前操作系统平台,根据平台做一些环境变量和内存初始化,然后通过对postgres命令的参数解析,调用对应函数,进入对应流程。

        主要流程图:

postgresql源码学习(43)—— main函数主要流程_PostgreSQL

postgresql源码学习(43)—— main函数主要流程_源码学习_02

代码中最主要的部分如下:

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数据库内核分析》第二章

PostgreSQL启动main函数都干了什么(一) - 走看看