2.2.3 initdb的执行过程
执行initdb程序时,将从initdb.c文件中的main函数开始执行,main函数的执行流程如图2-3所示。initdb执行时将按照顺序执行下列工作:
1)根据用户输入的命令行参数获取输入的命令名。
2)设置系统编码为LC_ALL,查找执行命令的绝对路径并设置该路径。
3)设置环境变量(pg_data等),获取系统配置文件的源文件路径(postgres.bki、postgresql.conf.sample等文件),并检查该路径下各文件的可用性。
4)设置中断信号处理函数,对终端命令行SIGHUP、程序中断SIGINT、程序退出SIGQUIT、软件中断SIGTERM和管道中断SIGPIPE等信号进行屏蔽,保证初始化工作顺利进行。
5)创建数据目录,以及该目录下一些必要的子目录,如base、global、base/1等。
6)测试当前服务器系统性能,由测试结果创建配置文件postgresql.conf、pg_hba.conf、pg_ident.conf,并对其中定义的参数做一些设置。
7)在bootstrap模式下创建数据库template1,存储在数据目录的子目录base/1/中。
8)创建系统视图、系统表TOAST表等,复制template1来创建template0和postgres,这些操作都用普通的SQL命令来完成。
9)打印操作成功等相关信息,退出。
initdb是PostgreSQL中一个独立的程序,它的主要工作就是对数据集簇进行初始化,创建模板数据库和系统表,并向系统表中插入初始元组。在这以后,用户创建各种数据库、表、视图、索引等数据库对象和进行其他操作时,都是在模板数据库和系统表的基础上进行的。
图2-3 initdb的运行流程 |
【责任编辑:云霞 TEL:(010)68476606】