postgresql修改版本信息
由于项目中遇到了低版本sys_dump去备份高版本的数据库时没有把大对象备份出来,因为特别低的版本时还不支持BLOBS,所以准备在使用低版本的sys_dump备份高版本数据库时给用户反馈warning信息,告诉用户你在使用低版本的sys_dump,可能有些功能没有支持,请使用对应版本的sys_dump替换。下面简单看下“版本信息”在源码中的处理。 首先,在源码中版本信息是定义在宏PG_VERSION中的,在/src/include/pg_config.h头文件中,如下:
/* Define to the full name and version of this package. */ #define PACKAGE_STRING "Kingbase 7.1.2.9999 Dailybuild" /* Define to the version of this package. */ #define PACKAGE_VERSION "7.1.2.9999 Dailybuild" /* PostgreSQL version as a string */ <strong>#define PG_VERSION "7.1.2.9999 Dailybuild"</strong> /* PostgreSQL version as a number */ #define PG_VERSION_NUM 70102 当使用sys_dump --version 查看版本信息时,就直接puts输出PG_VERSION宏到标准输出,那么这么宏是如何改变成我们要发布的版本号呢? 在源码根目录build目录下有个shell脚本“build_version.sh”,它会修改configure文件,使用执行的版本来替换configure文件中的版本信息 #modify the version info in configure file tmp_file=configure.$$ version=`echo $label|sed "s/-/ /g"` sed -e "s/[0-9].[0-9].[0-9].[0-9]{4} [A-Za-z0-9]*/$version/" ../configure >$tmp_file if [ $? -eq 0 ] then mv -f $tmp_file ../configure chmod 0755 ../configure else echo "modify the configure file failed" exit 1 fi 这时,configure文件中保存的就是本次要发布的版本信息,然后我们执行“死亡三部曲”:configure -> make -> make install 。执行configure时会修改某些头文件信息,比如我们这次说的/src/include/pg_config.h头文件就是confgiure修改的文件之一,版本信息宏PG_VERSION被赋予正确值。 至此,我们就知道了postgresql的版本信息是如何处理的了,下面是一个例子: 1、进入build目录执行build_cersion.sh
[myzhen@server-yanfa1-zqgao1 build]$ ls ~ after_test.sh before_make.sh build_config.sh build_pack.sh build_test.bat build_version.sh configure.745 tar_filter.ini test_esql.sh [myzhen@server-yanfa1-zqgao1 build]$ ./build_version.sh --help Usage: build_version.sh <options> e.g : build_version.sh --platform=windows-x86_64 --label=7.1.2.0001-release --enable=grid <options> may be: --platform= linux-i686 linux-x86_64 windows-i686 windows-x86_64 --label= 7.1.2.0001-dailybuild 7.1.2.0001-release --enable= grid yongyou ps none [myzhen@server-yanfa1-zqgao1 build]$ ./build_version.sh --platform=linux-x86_64 --label=7.1.2.6666-release [myzhen@server-yanfa1-zqgao1 build]$这时可以去configure文件中查找字符串“7.1.2.6666”,肯定能被修改正确 2、执行config前/src/include/pg_config.h 中PG_VERSION宏的值如下(默认值): <strong>/* Define to the version of this package. */ #define PACKAGE_VERSION "7.1.2.9999 Dailybuild"</strong> 执行config后:
/* Define to the version of this package. */ #define PACKAGE_VERSION "7.1.2.6666 release"可以看到,已经被修改过来,另外 configure文件执行时还会修改其他的源码头文件,替换一些宏的默认值,再次不一一介绍,需要时查看configure脚本即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |