Chargement de fichiers plats (csv etc.) dans PostgreSQL
Posté : mer. 5 sept. 2018 18:17
Merci à Guillaume pour ses questions :
J’aurais quelques petites question sur l’équivalent PostgreSQL des tables externes d’Oracle.
- Faut-il bien utiliser les foreign data ? (instruction create foreign table… ?)
Dans les exemples que j’ai pu voir, ils font systématiquement : create extension file_fdw et create server ….
- Est-ce que je dois le faire aussi pour chaque table externe que je crée ? ou est-ce un extension à installer une seule fois par schéma (ou base) ?
Oracle gère un fichier « bad » pour les lignes rejetées et un fichier « log » pour en connaitre les raisons.
- Y a-t-il un équivalent sous postgreSQL ou est-ce que c’est en mode « tout ou rien » ?
Réponse :
L'équivalent direct PostgreSQL de la table externe Oracle de type fichier plat est bien la table étrangère (standard SQL/MED) s'appuyant sur l'extension file_fdw.
Les créations de l'extension (create extension file_fdw) et du serveur (create server) sont des opérations à réaliser une fois par base. Ensuite, il est possible de créer des tables étrangères (create foreign table) et de donner des droits de lecture sur ces tables aux utilisateurs classiques.
L'extension file_fdw ne gère pas directement les lignes invalides par l'intermédiaire d'une badfile comme Oracle Database. Depuis PostgreSQL 10, la table peut toutefois être créée en s'appuyant sur la sortie standard d'un programme plutôt que directement sur un fichier. Il serait donc théoriquement possible d'éliminer à la volée les enregistrements non conformes et de les stocker dans un .bad.
Plus simplement, il est possible de charger les fichiers plats via pgloader. C'est un outil actuellement maintenu par Dimitri Fontaine. Il est très complet, présent dans le repository pgdg et intègre une gestion des lignes rejetées.
J’aurais quelques petites question sur l’équivalent PostgreSQL des tables externes d’Oracle.
- Faut-il bien utiliser les foreign data ? (instruction create foreign table… ?)
Dans les exemples que j’ai pu voir, ils font systématiquement : create extension file_fdw et create server ….
- Est-ce que je dois le faire aussi pour chaque table externe que je crée ? ou est-ce un extension à installer une seule fois par schéma (ou base) ?
Oracle gère un fichier « bad » pour les lignes rejetées et un fichier « log » pour en connaitre les raisons.
- Y a-t-il un équivalent sous postgreSQL ou est-ce que c’est en mode « tout ou rien » ?
Réponse :
L'équivalent direct PostgreSQL de la table externe Oracle de type fichier plat est bien la table étrangère (standard SQL/MED) s'appuyant sur l'extension file_fdw.
Les créations de l'extension (create extension file_fdw) et du serveur (create server) sont des opérations à réaliser une fois par base. Ensuite, il est possible de créer des tables étrangères (create foreign table) et de donner des droits de lecture sur ces tables aux utilisateurs classiques.
L'extension file_fdw ne gère pas directement les lignes invalides par l'intermédiaire d'une badfile comme Oracle Database. Depuis PostgreSQL 10, la table peut toutefois être créée en s'appuyant sur la sortie standard d'un programme plutôt que directement sur un fichier. Il serait donc théoriquement possible d'éliminer à la volée les enregistrements non conformes et de les stocker dans un .bad.
Plus simplement, il est possible de charger les fichiers plats via pgloader. C'est un outil actuellement maintenu par Dimitri Fontaine. Il est très complet, présent dans le repository pgdg et intègre une gestion des lignes rejetées.