pg_upgrade: "lc_collate values for database "postgres“不匹配”

pg_upgrade: "lc_collate values for database "postgres" do not match"

我刚刚升级(使用 Homebrew)我的 postgreSql 和 postGis 安装。我不能再 'brew postgresql-upgrade-database' (因为它告诉我我的数据是 'error: already upgraded' 来自之前的尝试;它不是,因为尝试失败),并且走手动 'pg_upgrade' 路线很好,直到处理 'template1' 数据库抛出

    lc_collate values for database "postgres" do not match:  old "C", new "en_US.UTF-8"

错误。我没有创建那个 'template1' 数据库,所以如果它以某种方式可以覆盖字符串匹配要求,它是可消耗的(如果不是以某种方式需要的话)。在此先感谢您的任何建议。

您不清楚哪个数据库受到影响:postgrestemplate1

要使用pg_upgrade,新旧集群必须安装相同的语言环境。所以试试

initdb --locale=C ...

创建新集群。

template1 是一个必不可少的数据库——没有它,CREATE DATABASE 就会有问题。您还应该保留 postgres 管理数据库。

如果两个数据库的语言环境不同,您需要以相同的方式创建新的集群,例如:

DROP DATABASE postgres;
CREATE DATABASE postgres
   LC_COLLATE 'C' LC_CTYPE 'C'
   TEMPLATE template0;

只需更新排序规则和 ctype 编码:

UPDATE pg_database SET datcollate='en_US.UTF-8', datctype='en_US.UTF-8' WHERE datname='postgres';

同样对 template1template0 重复此查询 — 或者如果您只有这三个数据库,则可以删除 WHERE 子句。

检查\l