2017-08-15 3 views
0

Im essayant d'exporter table Oracle dans une décharge locale postgresql via la commande de copie:POSTGRESQL 9.6 Copier le fichier créé plus grand que la table

\copy (select * from remote_oracle_table) to /postgresql/table.dump with binary; 

L'oracle de taille table`s est 25G. Howvere, la commande de copie a créé un fichier 50G. Comment est-ce possible ?

Je suis capable de sélectionner à partir de la table des oracles à distance parce que j'ai l'extension oracle_fdw.

+0

Le texte est conservé dans une mémoire compressée dans Postgres (TOAST). Je ne me souviens pas de la structure du fichier de données Oracle, mais je suis plutôt optimiste qu'Oracle optimise également le stockage de texte. Il faut donc s'attendre à ce que le fichier texte prenne plus d'espace que la colonne de texte. Quels sont les types de données dans votre tableau? –

+0

Mais comme vous pouvez le voir dans la commande que j'ai utilisée j'ai choisi un format binaire. Les types de données sont date, entier, nombre, varchar2. De plus j'ai 30 colonnes. – Mariel

+0

Je ne pense pas que le binaire soit comparable à TOAST ... Attendons quand même - peut-être que quelqu'un connaissant le code source va l'expliquer –

Répondre

1

Quelques facteurs sont susceptibles à l'œuvre, y compris:

  • petits nombres dans integer et numeric champs utilisent plus d'espace au format binaire que le format de texte;

  • Oracle stocke probablement la table avec un certain degré de compression, ce que l'image binaire n'aura pas.

Vous trouverez probablement que si vous compressez le résultat dump sera un beaucoup plus petit.

+0

Si la sortie 'COPY' est correcte, cela doit être l'explication. Autant que je sache, Oracle compresse les données en n'enregistrant qu'une seule valeur par bloc de table et en le référençant à partir d'autres occurrences de même valeur. –