由于项目中遇到了低版本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脚本即可。 原文链接:https://www.f2er.com/postgresql/194857.html