PostgreSQL: Admin: Recreate Template1 Database

 24th February 2021 at 4:18pm

createdb 时,

createdb -l en_US.UTF-8 -O squirrel_admin squirrel

遇到了这样的报错:

createdb: error: database creation failed: ERROR:  new collation (en_US.UTF-8) is incompatible with the collation of the template database (C.UTF-8)
HINT:  Use the same collation as in the template database, or use template0 as template.

原因是 PG 内置了两个 template databases,分别叫 template1 和 template0。template1 可能是在安装 PG server 时生成的,而当时的 LC_COLLATE 是 C,导致 template1 的 collation 也是 C。PG 在 createdb 时默认会复制 template1 形成新的库,因此指定的 collation 冲突时会报错。

解决方式有两种:

  • 用 template0,有两种方式:
    • SQL:CREATE DATABASE dbname TEMPLATE template0;
    • CLI: createdb -T template0 dbname
  • 重建 template1,方法参考 这里