加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql修改版本信息

发布时间:2020-12-13 17:12:31 所属栏目:百科 来源:网络整理
导读:由于项目中遇到了低版本sys_dump去备份高版本的数据库时没有把大对象备份出来,因为特别低的版本时还不支持BLOBS,所以准备在使用低版本的sys_dump备份高版本数据库时给用户反馈warning信息,告诉用户你在使用低版本的sys_dump,可能有些功能没有支持,请使

由于项目中遇到了低版本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脚本即可。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读