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

Importation CSV PostgreSQL depuis la ligne de commande

La solution dans la réponse acceptée ne fonctionnera que sur le serveur et lorsque l'utilisateur exécutant la requête aura les autorisations pour lire le fichier, comme expliqué dans cette réponse SO.

Sinon, une approche plus flexible consiste à remplacer le COPY du SQL commande avec le psql La "méta-commande" appelée \copy qui prend toutes les mêmes options que le "vrai" COPY, mais est exécuté à l'intérieur du client (sans avoir besoin de ; à la fin):

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

Selon les docs, le \copy commande :

Effectue une copie frontale (client). Il s'agit d'une opération qui exécute une commande SQL COPY, mais au lieu que le serveur lise ou écrive le fichier spécifié, psql lit ou écrit le fichier et achemine les données entre le serveur et le système de fichiers local. Cela signifie que l'accessibilité des fichiers et les privilèges sont ceux de l'utilisateur local, et non du serveur, et aucun privilège de superutilisateur SQL n'est requis.

De plus, si le the_file.csv contient l'en-tête dans la première ligne, il peut être reconnu en ajoutant header à la fin de la commande ci-dessus :

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"