Database Postgres数据库编码从10.4升级到11.5;博士后;不匹配:old";SQL“U ASCII”;,新";UTF8";

Database Postgres数据库编码从10.4升级到11.5;博士后;不匹配:old";SQL“U ASCII”;,新";UTF8";,database,postgresql,encoding,upgrade,Database,Postgresql,Encoding,Upgrade,目前正在检查将Postgres从10.4升级到11.5的过程 当我使用“检查”选项运行pg_upgrade时,我收到以下消息。如果你对此有任何意见,关于你如何解决这个问题,我将不胜感激 bash-4.2$ /usr/pgsql-11/bin/pg_upgrade \ > -b /usr/pgsql-10/bin \ > -B /usr/pgsql-11/bin \ > -d /var/lib/pgsql/10/data \ > -D /var/lib/pgsql/11/d

目前正在检查将Postgres从10.4升级到11.5的过程

当我使用“检查”选项运行
pg_upgrade
时,我收到以下消息。如果你对此有任何意见,关于你如何解决这个问题,我将不胜感激

bash-4.2$ /usr/pgsql-11/bin/pg_upgrade \
> -b /usr/pgsql-10/bin \
> -B /usr/pgsql-11/bin \
> -d /var/lib/pgsql/10/data \
> -D /var/lib/pgsql/11/data \
> -c pgsql-10/ pgsql-11/

Performing Consistency Checks on Old Live Server
------------------------------------------------
Checking cluster versions                                   
ok
Checking database user is the install user                  
ok
Checking database connection settings                       
ok
Checking for prepared transactions                          
ok
Checking for reg* data types in user tables                 
ok
Checking for contrib/isn with bigint-passing mismatch       
ok

encodings for database "postgres" do not match:  old "SQL_ASCII", new "UTF8"
Failure, exiting

在初始化新服务器时,需要将其设置为与旧服务器匹配。类似于其中一个:

initdb --locale C  -D /var/lib/pgsql/11/data
pg_ctl initdb -o "--locale C"  -D /var/lib/pgsql/11/data
LC_ALL=C initdb  -D /var/lib/pgsql/11/data

您需要使用与旧集群相同的(令人讨厌的)编码创建新集群:

initdb -E SQL_ASCII --locale=C /new/data/directory
@杰尼斯,劳伦斯·阿尔比 谢谢你的评论,根据文件,我第一次不理解 我试图执行以下命令:
\usr/pgsql-11/bin/postgresql-11-setup initdb--locale=C-D/var/lib/pgsql/11/data

但是它正在下降,然后我按照您的建议执行了命令,验证成功了:
/usr/pgsql-11/bin/initdb--locale=C-D/var/lib/pgsql/11/data

-bash-4.2$ /usr/pgsql-11/bin/pg_upgrade \
> -b /usr/pgsql-10/bin \
> -B /usr/pgsql-11/bin \
> -d /var/lib/pgsql/10/data \
> -D /var/lib/pgsql/11/data \
> -c pgsql-10/ pgsql-11/
Performing Consistency Checks on Old Live Server
------------------------------------------------
Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok

*Clusters are compatible*

现在,我有第二个问题,是否可以从我的源postgres DB更改编码?如果我决定只避免这种情况,并在默认情况下继续使用SQL\u ASCII,它会以何种方式影响?

错误是因为编码,而不是区域设置。但是设置区域设置将设置默认编码。他们通常一起去。如果你只更改一个,那么升级检查将在轰炸前进一步进行。啊,你说得对,谢谢
--locale=C
默认情况下将选择encoding
SQL\u ASCII
。您好,正如您所见,我只使用-C(检查)选项执行了pg\u升级,并且该过程已中止,您认为升级将在不中止的情况下运行吗?如果这是正确的,那么我想我可以应用你的建议。您已经使用与旧集群匹配的编码重做了新集群的initdb。如果你不这样做,它就不会成功。没有办法“修复”新集群以使其成功,您必须重新创建它。