Je veux construire une nouvelle base de données postgreSQL en:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1;
et l'erreur est:
ERREUR: le nouveau classement (zh_CN.UTF-8) est incompatible avec le classement de la base de données de modèles (en_US.UTF8)
CONSEIL: utilisez le même classement que dans la base de données de modèles ou utilisez template0 comme modèle.
Comment changer la collection de base de données de modèles?
De la documentation PostgreSQL :
Une autre raison courante pour copier template0 au lieu de template1 est que de nouveaux paramètres d'encodage et de paramètres régionaux peuvent être spécifiés lors de la copie de template0, alors qu'une copie de template1 doit utiliser les mêmes paramètres que lui. Cela est dû au fait que template1 peut contenir des données spécifiques au codage ou spécifiques aux paramètres régionaux, tandis que template0 est connu pour ne pas le faire.
Vous ne pouvez utiliser que template0
pour créer une nouvelle base de données avec différents encodages et paramètres régionaux:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1
TEMPLATE template0;
Cela fonctionnera, mais cela signifie que toutes les modifications que vous avez apportées à template1
ne sera pas appliqué à la base de données nouvellement créée.
Pour modifier l'encodage et le classement de template1
vous devez d'abord supprimer template1
puis créez un nouveau modèle template1
de template0
. La façon de supprimer la base de données de modèles est décrite ici . Ensuite, vous pouvez créer une nouvelle base de données template1
avec l'encodage/classement choisi et le marquer comme modèle en définissant datistemplate=true
( exemple ):
update pg_database set datistemplate=true where datname='template1';