À partir 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 qu'elle. En effet, template1 peut contenir des données spécifiques à l'encodage ou aux paramètres régionaux, alors que template0 est connu pour ne pas en contenir.
Vous ne pouvez utiliser que template0
pour créer une nouvelle base de données avec un encodage et des paramètres régionaux différents :
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 procédure de suppression de 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/collation choisi et marquez-le comme modèle en définissant datistemplate=true
(exemple) :
update pg_database set datistemplate=true where datname='template1';