Vous n'êtes pas identifié(e).
Pages : 1
Bonjour, j'ai une question concernant la commande COPY.
Si je veux copier seulement 2 colonne d'un fichier CSV qui en contient 6 vers une table ne contenant que 2 colonne est-ce possible ? Ou dois-je faire une table de 6 colonne, importer le tout, puis supprimer les 4 colonnes qui ne m'intéressent pas ?
Car avec le FORCE NOT NULL il est précisé "Si une liste de colonnes est précisée, COPY ne copie que les données des colonnes spécifiées vers ou depuis le fichier. COPY FROM insère les valeurs par défaut des colonnes qui ne sont pas précisées dans la liste."
Donc moi je comprend que "COPY .... from .... delimiter ';' csv force not null nomcol1dufichier, nomcol2dufichier;" devrait fonctionner mais pas du tout, on doit spécifié 2 colonne de la table et non du fichier, donc pourquoi le "depuis le fichier" dans la phrase ci-dessus.
Voila, merci de votre aide.
Hors ligne
La documentation parle des colonnes de la table, pas du fichier. COPY importe (ou exporte) tout le fichier. Donc il vous faut importer tout dans une table temporaire et ne conserver que les colonnes qui vous intéressent. Vous pouvez aussi utiliser un outil comme pgloader qui saura ne prendre que quelques colonnes d'un fichier.
Guillaume.
Hors ligne
Merci de cette réponse rapide, j'ai bien compris
Hors ligne
Désolé j'ai encore une petite question, idiote ... mais dans mon copy je veux indiquer un fichier contenue dans le répertoire courant, donc "Copy talbe from './fichier' mais "./" ne fonctionne pas, je suis obligé de mettre le chemin complet, et il faut surtout pas que je mette cela. Quelle est la bonne syntaxe ?
Hors ligne
Bon ba c'est bien précisé "chemin absolu" donc je pense que sa n'est pas possible, ce qui est bien embêtant.
Hors ligne
Si vous l'exécutez à partir de psql, vous devriez regarder \copy. C'est une métacommande de psql assez intéressante.
Guillaume.
Hors ligne
Pages : 1