Il existe un très bon outil qui importe des tables dans Postgres à partir d'un fichier csv. Il s'agit d'un outil en ligne de commande appelé pgfutter (avec des binaires pour windows, linux, etc.). L'un de ses gros avantages est qu'il reconnaît également les noms d'attributs/colonnes.
L'utilisation de l'outil est simple. Par exemple, si vous souhaitez importer myCSVfile.csv
:
pgfutter --db "myDatabase" --port "5432" --user "postgres" --pw "mySecretPassword" csv myCSVfile.csv
Cela créera une table (appelée myCSVfile
) avec les noms de colonne tirés de l'en-tête du fichier csv. De plus, les types de données seront identifiés à partir des données existantes.
Quelques notes :La commande pgfutter
varie en fonction du binaire que vous utilisez, par ex. il pourrait s'agir de pgfutter_windows_amd64.exe
(renommez-le si vous avez l'intention d'utiliser fréquemment cette commande). La commande ci-dessus doit être exécutée dans une fenêtre de ligne de commande (par exemple, sous Windows, exécutez cmd
et assurez-vous que pgfutter
est accessible). Si vous souhaitez avoir un nom de table différent, ajoutez --table "myTable"
; pour sélectionner un schéma de base de données particulier, utilisez --schema "mySchema"
. Si vous accédez à une base de données externe, utilisez --host "myHostDomain"
.
Un exemple plus élaboré de pgfutter
pour importer myFile
dans myTable
est-ce celui-ci :
pgfutter --host "localhost" --port "5432" --db "myDB" --schema "public" --table "myTable" --user "postgres" --pw "myPwd" csv myFile.csv
Vous changerez très probablement quelques types de données (du texte au numérique) après l'importation :
alter table myTable
alter column myColumn type numeric
using (trim(myColumn)::numeric)