postgresql从入门到菜鸟(十二)initdb流程分析-初期化集簇(下)

本文详细介绍了PostgreSQL的initdb流程,包括引导模式创建template0,接着通过单用户模式建立system tables、视图、依赖、扩展插件,设置权限和schema,创建排序规则和编码转换表,以及加载plpgsql扩展和完成template1的复制。最终,讨论了初始化集群的收尾工作和数据同步,为理解PostgreSQL的启动过程提供了深入见解。
摘要由CSDN通过智能技术生成

上篇文章分析到使用引导模式创建了template0,下面继续分析

到了这里引导模式的工作基本就结束了,下面开始使用postgres的单用户模式对template1创建系统表,视图,依赖,以及扩展插件的安装等一列操作。

首先是通过setup_auth()设置search_path和exit_on_error,下面的代码本来是放在setup_auth()中执行,但是新版本中被提出来了。

	//这里第一个参数给的是postgres,第二个参数给的是-single -F -O -c search_path=pg_catalog -c exit_on_error=true
	//这里把exit_on_error设为true之后,任何错误将中止当前会话。默认是false,只有 FATAL 错误(致命)将中止会话。
	snprintf(cmd, sizeof(cmd),
		 "\"%s\" %s template1 >%s",
	     backend_exec, backend_options,
	     DEVNULL);

然后是通过setup_depend()设置依赖关系,其实就是更新pg_depend和pg_shdepend表

static void
setup_depend(FILE *cmdfd)
{
	const char *const *line;
	static const char *const pg_depend_setup[] = {
		……
		//删除pg_depend和pg_shdepend表中的数据并清理
		//pg_depend和pg_shdepend表之前通过postgres.bki创建
		"DELETE FROM pg_depend;\n\n",
		"VACUUM pg_depend;\n\n",
		"DELETE FROM pg_shdepend;\n\n",
		"VACUUM pg_shdepend;\n\n",
		
		//向pg_depend表中填充数据
		"INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
		" FROM pg_class;\n\n",
		"INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
		" FROM pg_proc;\n\n",
		……
		NULL
	};
	
	//逐行执行
	for (line = pg_depend_setup
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值