您的位置:首页 > 数据库

PostgreSQL的 initdb 源代码分析之二十一

2013-07-09 10:05 351 查看
继续分析:

setup_schema();


展开:

实质就是创建info_schema。

cmd 是:

"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true -j template1 >/dev/null

infor_schem_file是:/home/pgsql/project/share/information_schema.sql

/*
* load info schema and populate from features file
*/
static void
setup_schema(void)
{
PG_CMD_DECL;
char      **line;
char      **lines;

fputs(_("creating information schema ... "), stdout);
fflush(stdout);

lines = readfile(info_schema_file);

///fprintf(stderr,"\n====================info_schema_file is: %s\n", info_schema_file);

/*
* We use -j here to avoid backslashing stuff in information_schema.sql
*/
snprintf(cmd, sizeof(cmd),
"\"%s\" %s -j template1 >%s",
backend_exec, backend_options,
DEVNULL);

///fprintf(stderr,"\n=====================cmd is: %s \n",cmd);

PG_CMD_OPEN;

for (line = lines; *line != NULL; line++)
{
PG_CMD_PUTS(*line);
free(*line);
}

free(lines);

PG_CMD_CLOSE;

snprintf(cmd, sizeof(cmd),
"\"%s\" %s template1 >%s",
backend_exec, backend_options,
DEVNULL);

PG_CMD_OPEN;

PG_CMD_PRINTF1("UPDATE information_schema.sql_implementation_info "
"  SET character_value = '%s' "
"  WHERE implementation_info_name = 'DBMS VERSION';\n",
infoversion);

PG_CMD_PRINTF1("COPY information_schema.sql_features "
"  (feature_id, feature_name, sub_feature_id, "
"  sub_feature_name, is_supported, comments) "
" FROM E'%s';\n",
escape_quotes(features_file));

PG_CMD_CLOSE;

check_ok();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: