Bonjour,
Je développe un projet en C# (Framework .Net 4), avec une base de données PostgreSQL.
Je suis confronté à un problème concernant la sauvegarde et la récupération de données d'une colonne de type bytea, suite au passage de la version Postgre SQL 8.4 à la version 9.
Lorsque je récupère dans mon code la donnée de type byte[] stockée dans ma base de données, celle ci est différente et est deux fois plus grande que celle qui a été sauvegardée avec une la version base de Postgr 9, alors que les données sont bien identiques avec la version 8.4.
Explications :
J'ai un tableau de byte de taille 100, je le sauvegarde dans la base de donnée à l'aide d'une requête classique :
Je récupère ensuite cette donnée à l'aide d'une requête du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 command.CommandText = "INSERT INTO table(donnees) VALUES(:donnees)"; command.Parameters.Add(new NpgsqlParameter("donnees", DbType.Binary)).Value = monByteA;
J'obtiens bien un byte[] mais celui-ci pèse 201 (100*2+1).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2command.CommandText = "SELECT donnees FROM table WHERE id = 308";
Quelque soit la valeur de mon byte[] sauvegardé, la valeur récupérée est celle d'origine*2+1.
Il n'y pas donc pas moyen d'exploiter les données récupérées...
Je n'ai pas ce soucis avec la version de Postgre 8.4, mais le problème apparait sur une base sauvegardée depuis la version 8.4 et qui a été restaurée sur une version 9...
- Auriez vous une idée d'où ce problème peut venir?
- Je n'ai pas vu de références particulières aux données de type 'bytea' dans le changelog de Postgre 9, y a t'il une gestion différente?
- Dans le pire des cas, la donnée traitée peut être stockée au format XML, mais cela engendrerait des pertes de performances.
Partager