web-dev-qa-db-fra.com

Ajouter une nouvelle collation à une base de données Postgres

J'ai ces collations:

postgres = # Sélectionnez * à partir de pg_collation; 
 Collname | CollnamesPace | Collier | Collençage | Collcolate | collisiontype [.____] ------------ + ---------------- + ------------ + --- ------------ + -------------- + ------------ 
 Par défaut | 11 | 10 | -1 | | [.____] c | 11 | 10 | -1 | C | C 
 POSIX | 11 | 10 | -1 | POSIX | POSIX 
 EN_US | 11 | 10 | 6 | EN_US.UTF8 | EN_US.UTF8 
 EN_US.UTF8 | 11 | 10 | 6 | EN_US.UTF8 | EN_US.UTF8 
 UCS_BASIC | 11 | 10 | 6 | C | C [.____] (6 rangées)

J'ai installé un nouveau paramètre local sur mon système et j'aimerais l'utiliser sur Postgres. Il semble que le seul moyen d'installer une nouvelle collision utilise la commande initdb, mais elle nécessite de faire un pg_dumpall, supprimer le répertoire de données Postgres, exécuter initdb et restaurer toutes les données du décharge. N'y a-t-il pas une solution plus facile?

6
José Luis

Vous n'avez pas besoin de créer un nouveau cluster de DB. Vous pouvez utiliser (CREATE COLLATION dans Postgres 9.1 ou ultérieure. Exemple dans le manuel:

Pour créer une collation à partir du système d'exploitation locale fr_fr.utf8 (en supposant que le codage actuel de la base de données est UTF8):

CREATE COLLATION french (LOCALE = 'fr_FR.utf8');

Assurez-vous de lire le chapitre Gestion des collations dans le manuel pour comprendre les détails. En particulier:

Dans une base de données particulière, seules des collations utilisant le codage de cette base de données sont d'intérêt. Autres entrées dans pg_collation sont ignorés.

I.E., la collation doit correspondre à votre codage de la base de données à être disponible.
Mais il y a plus. Lis le.

7
Erwin Brandstetter