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' 数据库,所以如果它以某种方式可以覆盖字符串匹配要求,它是可消耗的(如果不是以某种方式需要的话)。在此先感谢您的任何建议。
您不清楚哪个数据库受到影响:postgres
或 template1
。
要使用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';
同样对 template1
和 template0
重复此查询 — 或者如果您只有这三个数据库,则可以删除 WHERE
子句。
检查\l
。
我刚刚升级(使用 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' 数据库,所以如果它以某种方式可以覆盖字符串匹配要求,它是可消耗的(如果不是以某种方式需要的话)。在此先感谢您的任何建议。
您不清楚哪个数据库受到影响:postgres
或 template1
。
要使用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';
同样对 template1
和 template0
重复此查询 — 或者如果您只有这三个数据库,则可以删除 WHERE
子句。
检查\l
。