Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 13/10/2010 18:22:21
- Gold.Strike
- Membre
Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
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 :
command.CommandText = "INSERT INTO table(donnees) VALUES(:donnees)";
command.Parameters.Add(new NpgsqlParameter("donnees", DbType.Binary)).Value = monByteA;
Je récupère ensuite cette donnée à l'aide d'une requête du type :
command.CommandText = "SELECT donnees FROM table WHERE id = 308";
J'obtiens bien un byte[] mais celui-ci pèse 201 (100*2+1).
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.
Hors ligne
#2 13/10/2010 19:19:01
- Marc Cousin
- Membre
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
Bonjour, la raison est la suivante :
http://docs.postgresqlfr.org/9.0/runtim … tea-output
(au passage, guillaume, on dirait que le paragraphe est passé à la trappe, côté traduction )
Lisez aussi cela:
http://docs.postgresqlfr.org/9.0/datatype-binary.html
En clair, le format 'par défaut, d'export en format texte des bytea a changé, d'où votre problème. Le nouveau format est plus performant et plus simple à analyser.
Si vous voulez tout de même garder l'ancien comportement, vous avez deux possibilités:
- Modifier bytea_output
- utiliser la fonction 'encode' explicitement (http://docs.postgresqlfr.org/9.0/functi … tring.html).
Dans les deux cas, le format qui vous intéresse est 'escape'.
Marc.
Hors ligne
#3 14/10/2010 11:00:45
- Gold.Strike
- Membre
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
Merci de ton aide,
On a donc corrigé le problème en modifiant le fichier postgresql.conf :
bytea-output='escape'
Hors ligne
#4 14/10/2010 11:09:30
- gleu
- Administrateur
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
Yep, mauvais coup. Je viens de le traduire. Rien à re-générer la doc
Guillaume.
Hors ligne
#5 04/08/2013 17:33:00
- icadedt
- Membre
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
quand j'insere bytea_output = 'escape' dans postgresql.conf , le serveur 8.4 refuse de redemarrer...
Hors ligne
#6 04/08/2013 18:46:46
- rjuju
- Administrateur
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
C'est normal, il s'agit d'un paramètre apparut en 9.0. Vous devez donc le supprimer de votre fichier de configuration.
Julien.
https://rjuju.github.io/
Hors ligne
#7 04/08/2013 22:05:08
- icadedt
- Membre
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
j'ai essayé sur postgresql 9.2 , je n'arrive pas non plus à redemarrer le serveur 9.2 en mettant bytea-output='escape'
Hors ligne
#8 05/08/2013 08:04:40
- rjuju
- Administrateur
Re : Problème avec la sauvegarde d'une données de type bytea avec Postgre 9
Avez-vous mis "bytea_output" ou "bytea-output" ? Car seul le premier est correct.
Julien.
https://rjuju.github.io/
Hors ligne