Подтвердить что ты не робот

Как изменить кодировку коллекции базы данных шаблонов на postgresql

Я хочу создать новую базу данных postgreSQL:

CREATE DATABASE newdb
WITH OWNER = postgres
   ENCODING = 'UTF8'
   TABLESPACE = pg_default
   LC_COLLATE = 'zh_CN.UTF-8'
   CONNECTION LIMIT = -1;

и ошибка:

ERROR:  new collation (zh_CN.UTF-8) is incompatible with the collation of the template    database (en_US.UTF8)
HINT:  Use the same collation as in the template database, or use template0 as template.

как изменить коллекцию базы данных шаблонов? сделайте это как (zh_CN.UTF-8)

4b9b3361

Ответ 1

Из PostgreSQL документация:

Другой распространенной причиной копирования шаблона0 вместо template1 является что при копировании могут быть заданы новые параметры кодирования и локали template0, тогда как копия шаблона1 должна использовать те же настройки, что и делает. Это связано с тем, что шаблон1 может содержать специфичные для кодирования или специфичные для локали данные, в то время как template0 не известен.

Вы можете использовать только template0 для создания новой базы данных с различной кодировкой и локали:

CREATE DATABASE newdb
WITH OWNER = postgres
   ENCODING = 'UTF8'
   TABLESPACE = pg_default
   LC_COLLATE = 'zh_CN.UTF-8'
   CONNECTION LIMIT = -1
   TEMPLATE template0;

Это будет работать, но это означает, что любые изменения, внесенные в template1, не будут применены к недавно созданной базе данных.

Чтобы изменить кодировку и сортировку template1, вы должны сначала удалить template1, а затем создать новый шаблон template1 из template0. Как отказаться от базы данных шаблонов описано здесь. Затем вы можете создать новую базу данных template1 с выбранной кодировкой/сопоставлением и пометить ее как шаблон, установив datistemplate=true (пример):

update pg_database set datistemplate=true  where datname='template1';