Vous n'êtes pas identifié(e).
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
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
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
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)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
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
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