我正在 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-collate=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,所有数据均正常。