Vous n'êtes pas identifié(e).
Bonjour,
Je veux faire une migration de données de WinDev vers Postgresql 8.4. Pour cela, j'ai fait un export de la base WinDev vers Excel et après je compte remplir les tables crées dans Postgresql par les données contenues dans les tables Excel. Pourriez-vous m'expliquer comment remplir ces tables ?
Cordialement.
Hors ligne
Il vous faut transformer le fichier excel en plusieurs fichiers CSV (un par table), créer les tables sur une base de données PostgreSQL et injecter les données avec la commande SQL COPY ou avec un outil du type pgloader.
Guillaume.
Hors ligne
Je vous remercie. Pourriez-vous m'indiquer une documentation qui explique comment utiliser pgloader (de l'installation à l'utilisation) ?
Hors ligne
Non, à ma connaissance, il n'existe que la page man (http://pgloader.projects.postgresql.org/).
Guillaume.
Hors ligne
Non, à ma connaissance, il n'existe que la page man (http://pgloader.projects.postgresql.org/).
Il a aussi le blog de Dimitri (l'auteur) qui a quelques articles, dont un sur la gestion de taille fixe:
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne
Bonjour
J'ai utilisé un autre procédé.
Via WinDev, on peut injecter des données Hyper File sans sortir du pro - logiciel.
Il suffit de créer une connexion supplémentaire en natif (si la base PostgreSQL est accessible).
J'étais confronté au même problème.
J'ai parcouru la base HF en utilisant
+ fListeFichier : pour lister chaque fichier
+ HDéclareExterne pour importer un fichier HF (prenez soin de le fermer avec un HFerme et un HAnnuleDéclaration.
// On est jamais trop prudent
+ HListeRubrique pour l'identification des colonnes.
Puis j'ai créé des requêtes - groupées par 200 -, et les envoyées, via SQLExec pour mettre à jour les données de la base PostgreSQL.
Le tout dans un thread ; pensez à mettre une trace.
Olivier
Hors ligne
Bonjour,
Je vous remercie tous de vos réponses.
J'ai un soucis avec la commande COPY table FROM ...
Le fichier CSV à partir duquel je veux copier les données ne peut pas être ouvert :
ERREUR: n'a pas pu ouvrir le fichier « //.../communes.csv » pour une lecture : Invalid argument
Avez-vous déjà rencontré cette erreur ?
Cordialement.
Hors ligne
On pourrait avoir la requête exacte ? vous êtes sûr du message d'erreur ? parce que "invalid argument", je n'ai jamais vu ça. Le fichier se trouve bien sur le serveur PostgreSQL ?
Guillaume.
Hors ligne
Requête :
COPY commune FROM '\\\\imhotep\\OIT\\Geologie\\ARCGIS\\Layachi\\postgis\\communes.csv' WITH DELIMITER AS ';'
Erreur :
ATTENTION: utilisation non standard de \\ dans une chaîne littérale
LINE 1: COPY commune FROM '\\\\imhotep\\OIT\\Geologie\\ARCGIS\\Layac...
^
HINT: Utilisez la syntaxe de chaîne d'échappement pour les antislashs, c'est-à-dire E'\\'.
ERREUR: n'a pas pu ouvrir le fichier « \\imhotep\OIT\Geologie\ARCGIS\Layachi\postgis\communes.csv » pour une lecture : Invalid argument
********** Erreur **********
ERREUR: n'a pas pu ouvrir le fichier « \\imhotep\OIT\Geologie\ARCGIS\Layachi\postgis\communes.csv » pour une lecture : Invalid argument
État SQL :XX000
Le fichier n'est pas sur le serveur Postgresql. Dans quel répertoire doit-il être ?
Hors ligne
Remplacez les antislash par des slashs. De plus, le fichier semble être sur un autre poste, ce qui a de fortes chances de ne pas fonctionner. Essayez malgré tout en remplaçant les antislashs par des slashs.
Guillaume.
Hors ligne
J'ai mis le fichier dans la racine du disque C et j'ai exécuté la requête :
COPY commune FROM 'C:/communes.csv' WITH DELIMITER AS ';'
Et j'ai eu l'erreur :
ERREUR: n'a pas pu ouvrir le fichier « C:/communes.csv » pour une lecture : No such file or directory
********** Erreur **********
ERREUR: n'a pas pu ouvrir le fichier « C:/communes.csv » pour une lecture : No such file or directory
État SQL :58P01
Hors ligne
On est bien d'accord que le fichier se trouve sur le serveur PostgreSQL ? que l'utilisateur postgres a droit de lire ce fichier ?
Guillaume.
Hors ligne
Non, le fichier est sur un poste client du serveur Postgresql. Où est-ce qu'il faut le mettre plus exactement ?
Hors ligne
La commande COPY s'exécute sur le serveur, donc le serveur doit pouvoir y avoir accès. Où vous le mettez à peu d'importance à partir du moment où l'utilisateur postgres du serveur PostgreSQL peut y accéder en lecture.
Guillaume.
Hors ligne
Comment puis-je reconnaître les endroits accessibles par l'utilisateur postgres ?
Dernière modification par yo_haha (22/07/2011 16:01:31)
Hors ligne
Si vous êtes sur du Linux, tout est accessible à condition que le fichier soit en lecture pour l'utilisateur postgres. Sous Windows, ça doit se gérer à peu près de la même façon : dans l'onglet Sécurité du fichier, l'utilisateur postgres doit pouvoir lire le fichier.
Guillaume.
Hors ligne
Je travaille sous windows sur un poste utilisateur qui se connecte à un serveur où Postgresql est installé. J'ai mes propores identifiants pour me connecter. Je suis le propriétaire de la base de donnée en question (pas postgres). On vient de m'accorder les droits de super user pour exécuter la requête copy.
Dans le cas que je viens d'expliciter je ne pense pas que c'est postgres qui doit pouvoir accéder au fichier. Est-ce que je me trompe ?
Hors ligne
Pas besoin d'avoir les droits super utilisateur pour exécuter un COPY. Il faut seulement que l'utilisateur PostgreSQL qui exécute la requête ait le droit d'écrire dans la table et que l'utilisateur Unix postgres ait le droit de lire le fichier. Et, si, c'est l'utilisateur Unix postgres qui doit pouvoir accéder au fichier.
Guillaume.
Hors ligne
Lorsque je n'avais pas les droits de super user, j'avais l'erreur
"doit être super-utilisateur pour utiliser COPY à partir ou vers un fichier"
après l'exécution de
"copy commune from 'Z:/Geologie/ARCGIS/Layachi/postgis/communes.csv' delimiters ';' CSV"
Maintenant que j'ai ces droits j'ai l'erreur qui dit que le fichier est introuvable.
Hors ligne
Juste une question. Le serveur PostgreSQL se trouve sur un serveur Windows ou sur un serveur Unix ?
Guillaume.
Hors ligne
Je ne sais pas
Hors ligne
Y aurait-il une différence ?
Hors ligne
Lorsque je n'avais pas les droits de super user, j'avais l'erreur
"doit être super-utilisateur pour utiliser COPY à partir ou vers un fichier"
après l'exécution de
"copy commune from 'Z:/Geologie/ARCGIS/Layachi/postgis/communes.csv' delimiters ';' CSV"Maintenant que j'ai ces droits j'ai l'erreur qui dit que le fichier est introuvable.
je n'ai pas suivi le thread, mais utiliser 'SET standard_conforming_strings TO on;" permet d'utiliser des chemins windows 'sans se prendre la tete'.
Lire la doc pour les implications:
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne
Y aurait-il une différence ?
Oui, vu que le fichier doit se trouver sur le *serveur*. Si vous indiquer C:\..., ça fait certainement référence à votre poste client, ce qui ne marchera pas.
Guillaume.
Hors ligne
La requête suivante ne marche pas
COPY commune FROM '//tesla/copy/communes.csv' WITH DELIMITER AS ';'
//tesla/copy est un répertoire se trouvant sur le serveur où Postgresql est installé.
J'ai toujours la mâme erreur. Auriez-vous une solution ?
Hors ligne