PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/04/2012 19:55:33

info31
Membre

Migration Oracle==> Postgres et Blob

Bonjour,

J'ai migré une base ORACLE vers POSTGRES 9 via la dernière version d'ORA2PG. J'ai tout récupéré.

Mais, j'ai une table avec des BLOB qui ont été importés dans un champ de type BYTEA sous Postgres et quand j'essaie de lire un des fichiers PDF stockés dans ce champ, je m'aperçois qu'ils sont altérés. En regardant de plus près, je me suis aperçu qu'entre ORACLE et POSTGRES, il manque 2Ko sur un fichier de 700 Ko.

J'ai comparé les fichiers PDF sous Notepad, a priori,, j'ai perdu toutes les balises NUL.

Avez-vous une idée sur la raison de ce problème et surtout y-a-t'il une solution ? J'ai entendu dire qu'il pouvait y avoir des soucis pour la récupération des BLOB. Peut-être que ce problème se pose particulièrement aux fichiers PDF.

Merci.

Hors ligne

#2 20/04/2012 20:42:15

rjuju
Administrateur

Re : Migration Oracle==> Postgres et Blob

Bonjour,
je crois qu'il y a une spécificité avec oracle, et que pour les blob par défaut toutes les données ne sont pas récupérées. Vous pouvez regarder ce thread pour plus de détail : http://forums.postgresql.fr/viewtopic.php?id=1812
Il a peut-être modifié son programme depuis et cela peut avoir des effets de bords. Vous pouvez également essayer de voir directement avec le programmeur de l'application (Gilles Darold) : http://ora2pg.darold.net/support.html (je crois qu'il vient ici de temps en temps). Il sera plus à même de vous répondre.

Hors ligne

#3 23/04/2012 12:52:19

gilles
Membre

Re : Migration Oracle==> Postgres et Blob

Bonjour,

La dernière version 8.10 permet normalement le contrôle de l'export des BLOB. Par défaut LongReadLen est à moins de 1Mo pour l'export des BLOBs, vous avez la directive LONGREADLEN dans ora2pg.conf pour augmenter cette valeur. Si LONGTRUNKOK est à 1 (cas par défaut dans les versions précédentes) le BLOB est simplement tronqué à LongReadLen sans retour d'erreur.

Concernant les balises NUL dans le PDF je ne sais pas comment elles sont représentées, mais le seul caractère qui est supprimé des données extraites depuis Oracle c'est le \0 (caractère de fin de chaine en C) car il n'est pas permit dans une donnée PostgreSQL. Il est donc systématiquement supprimé. Mais je ne pense pas qu'il s'agisse de cela ici.

Hors ligne

#4 23/04/2012 18:37:41

info31
Membre

Re : Migration Oracle==> Postgres et Blob

En fait, je n'ai pas été assez précis dans mon message précédent... Le fichier n'est absolument pas tronqué, il est seulement incomplet. Je peux même ouvrir le fichier dans Acrobat Reader qui me prévient qu'il comporte des erreurs et en effet, la présentation du fichier est altérée. Donc a priori, je ne pense que la directive LONGREADLEN va résoudre mon problème, en ajoutant le fait que mon fichier fait moins de 1 Mo.
En revanche, pour la suppression des \0, ça pourrait être éventuellement la cause du problème.

Hors ligne

#5 24/04/2012 09:21:16

gilles
Membre

Re : Migration Oracle==> Postgres et Blob

Dans ce cas, pouvez vous essayer de mettre en commentaire les lignes 4134 et 4168 du fichier Ora2Pg.pm et voir si cela règle le problème ? Au besoin je peux vous fournir une version modifiée du fichier.

Hors ligne

#6 25/04/2012 11:00:10

info31
Membre

Re : Migration Oracle==> Postgres et Blob

Bonjour,

premièrement merci gilles ça fonctionne !

J'ai donc mis en commentaire les lignes substituant les \0 pour les bytea .
lancer l'extraction d'un seul PDF et le PDF est totalement lisible sous Postgres .
Quelle conséquence peut-il y avoir en ne supprimant pas les \0 pour des données de type bytea ?
Et donc cela peut-il avoir des répercussions sur le reste des imports .

merci

Hors ligne

#7 25/04/2012 15:35:17

gilles
Membre

Re : Migration Oracle==> Postgres et Blob

Bonjour,

Très bien, il n'y a aucune conséquence mis à part la correction d'un bug dans la prochaine version d'Ora2Pg. J'appliquais bêtement la même règle de substitution des chaînes de caractères aux bytea, ce qui visiblement est une erreur. J'essaye de publier une nouvelle version pour la fin de la semaine, ce bug étant suffisamment important pour le justifier étant donné la corruption de données.

Merci de votre aide.

Hors ligne

#8 25/05/2012 00:00:54

bogh
Membre

Re : Migration Oracle==> Postgres et Blob

bonsoir messieurs ,svp je cherche un bout de code pour lire un pdf depuis postgres 8.2 je travaille sur projet j2ee (spring+hibernate+tomcat 6)

Hors ligne

#9 25/05/2012 00:38:59

rjuju
Administrateur

Re : Migration Oracle==> Postgres et Blob

Bonsoir.
Il est préférable de créer une nouvelle discussion pour un autre sujet.
Pour votre question, comment est stocké votre pdf dans la base ? Un champ bytea ou large object ?
A moins qu'il existe des composants pour ouvrir un pdf à partir d'une variable en mémoire, il faudra le stocker dans un fichier temporaire et l'ouvrir ensuite.

Hors ligne

Pied de page des forums