PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Puis-je créer automatiquement une table dans PostgreSQL à partir d'un fichier csv avec des en-têtes ?

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)