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 14/11/2018 17:13:46

Mlan2
Membre

Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

Bonjour,

J'ai la problématique de chargement d'un fichier texte à plat (sans délimiteur) dans une table, et je voudrai un avis d'expert à partager sur la meilleure méthode à utiliser pour cette opération.

J'utilise PSQL et la commande COPY.
Cette commande est prévue pour le format CSV ou texte uniquement, et pas de fonctionnalité pour décrire les colonnes par offset de positionnement.

Quelle serait la meilleure méthode que vous pourriez me conseiller ?

D'avance merci de votre retour.

Hors ligne

#2 14/11/2018 17:24:35

gleu
Administrateur

Re : Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

Il vous faut utiliser un outil externe pour convertir votre fichier à plat en fichier CSV. pgLoader le faisait en son temps, mais vous pouvez utiliser n'importe quel outil de type ETL, voire même LibreOffice ou Excel.


Guillaume.

Hors ligne

#3 14/11/2018 17:57:26

Mlan2
Membre

Re : Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

Merci du retour,

Si je résume, rien de natif pour ce type d'opération.
Pourquoi pgloader ne serait pas reconduit, il me paraissait un excellent outil pour le chargement de tables. (Si inspiré de sqlloader d'Oracle) ?

D'avance merci de votre retour.

Hors ligne

#4 14/11/2018 18:08:24

dverite
Membre

Re : Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

Si le fichier d'origine a une ligne par enregistrement, il pourrait être importé tel quel dans une table mono-colonne et ensuite inséré dans la table finale par une requête qui connaît la taille des champs et qui découpe les lignes avec des SUBSTR(ligne, début, longueur)
du style:

iNSERT INTO table_finale
   SELECT substr(ligne, 1, 10), substr(ligne, 11, 15), ...
     FROM table_intermediaire;

La table intermédiaire peut être créée en TEMPORARY ou au pire UNLOGGED pour accélérer l'import (pas de journalisation)

Dernière modification par dverite (14/11/2018 18:19:51)

Hors ligne

#5 14/11/2018 18:17:54

gleu
Administrateur

Re : Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

C'est une solution en effet. On peut aussi utiliser le Foreign Data Wrapper d'Andrew Dunstan (https://github.com/adunstan/file_fixed_ … record_fdw).


Guillaume.

Hors ligne

#6 15/11/2018 09:13:29

Mlan2
Membre

Re : Méthode de chargement de fichiers à plat (sans séparateur) (Conseil)

Merci de votre retour.

C'est en effet vers la suggestion proposée par dverite que je m'orientais afin de traiter le sujet.

Cette problématique pourrait être enregistrée dans la roadmap de Postgresql, et de façon plus générale, un moyen natif et plus élaboré pour le chargement de données à partir de fichiers, tel que le fait magnifiquement le sqlloader d'Oracle.

Hors ligne

Pied de page des forums