博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pg_upgrade升级报错:Only the install user can be defined in the new cluster
阅读量:5275 次
发布时间:2019-06-14

本文共 1690 字,大约阅读时间需要 5 分钟。

 

  前两天pg11刚出来,打算测试一下,想将测试库升级到pg11,之前测试库的版本是pg9.6,后面我将它升到了pg10,打算在pg10的版本基础上升级到pg11。

  但执行时,多次报出:

Performing Consistency Checks-----------------------------Checking cluster versions                                   okChecking database user is the install user                  okChecking database connection settings                       okChecking for prepared transactions                          okChecking for reg* data types in user tables                 okChecking for contrib/isn with bigint-passing mismatch       okChecking for presence of required libraries                 okChecking database user is the install user                  Only the install user can be defined in the new cluster.

所以就搜了一下代码,在src/bin/pg_upgrade/check.c中找到该报错的原因

/*     * We only allow the install user in the new cluster because other defined     * users might match users defined in the old cluster and generate an     * error during pg_dump restore.     */    if (cluster == &new_cluster && atooid(PQgetvalue(res, 0, 0)) != 1)        pg_fatal("Only the install user can be defined in the new cluster.\n");

pg_upgrade升级时,只允许使用安装新集群时所用的用户,这是因为在旧集群中存在的用户在执行pg_dump和restore时,可能会报错。

 

后面又查了一下环境变量,发现环境变量中配置了一个测试库的用户,而不是postgres用户。怀疑无论是在做initdb还是pg_upgrade时,都不应该走环境变量的用户,而且在执行pg_upgrade时,已经明确指定了使用postgres,那么可能出在initdb上,但重新测试发现无论initdb时,指没指定是否是postgres用户,都是按照postgres来初始化的,它是跟着操作系统用户走的。后来又重试了几遍,发现执行检测没问题,但到了实际执行时,总会报Only the install user can be defined in the new cluster的错误,然后删掉生成pg11版本的表空间数据,删掉初始化的新集群,再重新初始化,然后执行pg_ugrade的检测和实际执行就又变正常了,至此感觉碰到了bug。反复操作了三四次都是同样的结果。

 如有知道原因的请告知一下,谢谢。

 

另外,在安装pg11时,注意参数--wal-segsize放在了initdb部分,需要在做初始化时设置,在编译部分已经没有这个参数了。

 

 

转载于:https://www.cnblogs.com/xiaotengyi/p/9837721.html

你可能感兴趣的文章