vendredi, août 7 2009, 10:25
Bloc note PostgreSQL: comment vérifier que les données d'une base sont dans un encodage autre que UTF-8
Par Guillaume Lelarge - PostgreSQL - Lien permanent
C'est juste un petit post-it pour moi, mais ça pourrait aussi vous être utile. J'ai trouvé ce message en lisant pgsql-general.
Voici un exemple de son utilisation sur une base créée spécialement pour :
guillaume@laptop:~$ psql base1
Bienvenue dans psql 8.2.13, l'interface interactive de PostgreSQL.
Saisissez:
\copyright pour les termes de distribution
\h pour l'aide-mémoire des commandes SQL
\? pour l'aide-mémoire des commandes psql
\g ou point-virgule en fin d'instruction pour exécuter la requête
\q pour quitter
guillaume@base1=# \d
Liste des relations
Schéma | Nom | Type | Propriétaire
- - - -+ - - + - - -+ - - - - - - -
public | t1 | table | guillaume
public | t1_id_seq | séquence | guillaume
(2 lignes)
guillaume@base1=# select * from db_utf8_verify();
NOTICE: Checking table t1, field contenu
NOTICE: Checking table t1, field contenu
tab | fld | location
- - + - - + - - - - -
t1 | contenu | (0,1)
t1 | contenu | (0,5)
(2 lignes)
guillaume@base1=# select * from t1;
id | contenu
- -+ - - - - - - - - - - - - - -
1 | phrase en UTF -8 (���ui��)
2 | phrase en UTF -8 (àéèuiöî)
3 | totoéàù
4 | toto
3 | t �
(5 lignes)
guillaume@base1=# select * from t1 where ctid in ('(0,1)', '(0,5)');
id | contenu
- -+ - - - - - - - - - - - - - -
1 | phrase en UTF -8 (���ui��)
3 | t �
(2 lignes)
À mon avis, son seul côté négatif est sa lenteur. Traiter des chaînes avec PL/pgsql, c'est chercher les ennuis côté performances. Néanmoins, ce sera certainement plus rapide (et moins ennuyant) qu'un traitement manuel.
Ce serait cool d'avoir le même code en Python, Perl ou même carrément en C.
aucun commentaire