将 Postgres.app 9.1 升级到 9.2,获取 lc_collat​​e 值不匹配错误

spo*_*ong 5 postgresql upgrade

我正在我的 Macbook Pro(我的开发机器)上升级 Postgres.app,运行时出现错误:

pg_upgrade -b /Users/foo/Library/PostgreSQL/9.1/bin/ 
           -B /Applications/Postgres.app/Contents/MacOS/bin/ 
           -d /Users/foo/Library/Application\ Support/Postgres/var-9.1/ 
           -D /Users/foo/Library/Application\ Support/Postgres/var
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

lc_collate cluster values do not match:  old "en_US", new "en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

我该如何纠正?

注意:我曾经让Postgres.app运行 9.1,但我覆盖了它。我应该阅读/遵循的方向是:升级 Postgres.app。所以旧的bin不见了,但我还有数据目录。相反,我下载了 Postgres 9.1 并将其安装在其他地方,以使用 bin 目录升级并将我的数据移动到新的 Postgres。

spo*_*ong 1

由于我正在迁移数据并且不关心数据库中的任何新内容,因此我只是删除了其中的所有内容(当然您可以备份它以确保安全):

rm -rf ~/Library/Application\ Support/Postgres/var
Run Code Online (Sandbox Code Playgroud)

并使用语言环境 en_US 创建了一个新的,内容如下:

initdb --locale=en_US -D ~/Library/Application\ Support/Postgres/var
Run Code Online (Sandbox Code Playgroud)

然后我刚刚运行升级:

pg_upgrade -b ~/Library/PostgreSQL/9.1/bin/ 
           -B /Applications/Postgres.app/Contents/MacOS/bin/ 
           -d ~/Library/Application\ Support/Postgres/var-9.1/ 
           -D ~/Library/Application\ Support/Postgres/var
Run Code Online (Sandbox Code Playgroud)

然后运行分析仪,一切都很好。

./analyze_new_cluster.sh
Run Code Online (Sandbox Code Playgroud)

我连接了 pgAdmin3,所有数据都正常。