我正在升级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。
从http://www.postgresql.org/docs/9.0/static/pgupgrade.html
初始化新的PostgreSQL集群
使用initdb初始化新集群。 再次使用与旧集群相匹配的兼容initdb标志。 许多预构build的安装程序会自动执行此步骤。 没有必要启动新的群集。
当你运行initdb时,确保–lc-collate = locale与旧的db相同,例如“en_us”
由于我正在迁移数据,而不关心数据库中的任何新东西,我只是删除了那里的任何东西(当然,您可以将其备份起来以保证安全):
rm -rf ~/Library/Application\ Support/Postgres/var
并创build一个新的语言环境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,所有的数据是应该的。