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

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

我正在 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

我收到的错误:

lc_collate cluster values do not match:  old "en_US", new "en_US.UTF-8"

我该如何纠正这个问题?

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

答案1

http://www.postgresql.org/docs/9.0/static/pgupgrade.html

初始化新的 PostgreSQL 集群

使用 initdb 初始化新集群。同样,使用与旧集群匹配的兼容 initdb 标志。许多预构建安装程序会自动执行此步骤。无需启动新集群。

运行 initdb 时,请确保 --lc-collat​​e=locale 与旧数据库相同,例如“en_us”

答案2

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

rm -rf ~/Library/Application\ Support/Postgres/var

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

initdb --locale=en_US -D ~/Library/Application\ Support/Postgres/var

然后我就运行了升级:

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

然后只需运行分析器,一切就很好了。

./analyze_new_cluster.sh

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

相关内容