Vous n'êtes pas identifié(e).
bonjours, je travail sur la mise à jours d'une application web qui doit obligatoirement tourner sous PostgreSQL (due à l'extension PosrGIS) alors j'ai donc décider de l'installer.
je suis sous wamp via windows et je souhaiterai transférer les données de ma bases MySQL vers ma bases de données PostgreSQL. lorsque j'exporte mes données, j'ai environ 19 500 lignes d'insert et toutes les modifiés avec l'encodage de PostgreSQL serait une grannnnnnnde perte de temps ^^"
Par contre j'ai remarquer que je pouvais passer par un export de données CSV et utiliser la comande /COPY (cependant je n'ai pas très bien compris )
quelqu'un pourrai m’aiguiller pour mon problème ? :3
cordialement
Hors ligne
ah, je précise aussi que c'est ma première utilisation de Postgre donc je ne comprends pas tout
Hors ligne
C'est soit COPY ( http://docs.postgresql.fr/9.6/sql-copy.html ), qui s'exécute côté serveur, soit \copy qui s'exécute côté client avec psql (http://docs.postgresql.fr/9.6/app-psql.html).
Rencontrez-vous un problème avec l'exécution d'une de ces deux commandes ?
Julien.
https://rjuju.github.io/
En ligne
ce que je me demandais surtout, c'est l'endroit où je doit taper la commande COPY car le sql exporté via MySQL n'est pas reconnu par postgre, et si je doit faire cette commande COPY où dois-je la mettre, car je souhaite juste faire des insert dans ma base (et créer 2-3 tables)
Hors ligne
car je cherche une solution qui ne m'oblige pas à modifier tout mon code SQL car comme je l'ai dit précédemment, j'ai aux alentours de 19 500 lignes insert et postgre ne prends pas en comptre:
les int(5) --> int5
les 'date d\'aujourd\'hui' --> 'date d''aujourd''hui'
etc.......
de plus en exportant ma bases de mysql, certaines données deviennent --> 'DQ\r\nMN. PELTIER\r\nSG'
comment dois-je m'y prendre ? ^^"
Hors ligne
Bonjour,
Vous pouvez essayer ça :
https://www.convert-in.com/mysql-to-postgres.htm
mais c'est payant.
Sinon méthode manuelle :
http://www.linuxandubuntu.com/home/diff … postgresql
Cordialement,
Sébastien.
Hors ligne
Je ne suis pas sur de comprendre.
Avez-vous exporté la ou les tables mysql dans des fichiers CSV ? Si ces fichiers sont des fichiers CSV valides, ils devraient pouvoir être importé sans difficulté sur postgres.
La commande COPY est une commande SQL, et est donc à exécuter depuis n'importe quel outil offrant une connexion (pgadmin, psql...).
Avez-vous déjà migré le schéma ? Sinon, effectivement comme indiqué par Sébastien des outils existent pour ça (le plus connu étant pgloader, mais je ne sais pas ce que ça donne sous windows).
Julien.
https://rjuju.github.io/
En ligne
mon problème c'est que postgre n'as pas accès à mon fichier exel ^^" donc là je suis dans une impasse et je suis souler XD j'ai tenter tellement de chose... ^^" donc je ne sais plus quoi faire...
Hors ligne
Excel ou CSV ?
Pourquoi postgres n'y a pas accès, vous ne pouvez pas copier le fichier (format csv) sur un répertoire auquel postgresql à accès ?
Julien.
https://rjuju.github.io/
En ligne
CSV (excusez-moi) pourtant si, le répertoire sur lequel est mon fichier Postgre y à accès mais pourtant l'accès n'est pas autoriser, de plus lorsque j'utilise des logiciels qui me permettent de passer directement de mysql à postgresql, ces logiciels cessent de fonctionnez (tous) je ne comprends pas je suis dans une impasse (quelqu'un aurait un remède miracle ?)
Hors ligne
Si vous nous donner le message d'erreur exact et la commande COPY exacte, nous devriont pouvoir vous aider.
Julien.
https://rjuju.github.io/
En ligne
je souhaiterai savoir aussi comment marche la commande COPY (car je ne sais plus comment j'avais fait la dernière fois, j'aurai du prendre note) car partout où je me renseigne, ils ne montrent que comment copier une table alors que c'est une bases de donnée entière que je souhaiterai importe
Hors ligne
mais sinon le message d'erreur c'était du genre :
ERREUR: n'a pas pu ouvrir le fichier «C:/[...]/fichier.csv » pour une lecture : Permission denied
Hors ligne
COPY ne marche que pour une table, il faudra appeler la commande pour chaque table à importer.
Concernant l'erreur : il faut donner les droits de lecture à l'utilisateur faisant tourner le service postgres.
Julien.
https://rjuju.github.io/
En ligne
je vais expliquer en gros mon problème, je suis sur une application web nommé opencourrier (créer par openmairie) et je souhaite la mettre à jours, pour celà il faut passer par postgreSQL et non mySQL pour l'extension PostGIS cependant après avoir créer ma bases etc... pour mon appli web sur postgre en local, il faut que j'arrive à trouver le moyen de mettre les données de mes tables dans ma bases de donnée (mais j'ai beacoup trop d'insert à rentrer pour pouvoir le faire à la main donnée par donnée soit près de 19 500 insert) j'ai déjà mes tables et mes séquences mais il faut faire passer mes données de mysql vers postgre cependant, j'ai était mis en garde que le forma date n'était pas le même pour ces deux SGBD ce qui pourrai poser problème, de plus je n'arrive pas à trouver le moyen de transférer les données d'un SGBD à un autre.... quel serai le moyen le plus façile dans mon cas ? (sachant que je gère très bien le SQL de MySQL mais que je ne connait très peut celui de postgreSQL et que cette solution devrai pouvoir être exécutée par des personnes qui ne sont pas développeurs [mais qui sont quand-même doués dans le serveut informatique] )
merci de bien vouloir m'aider (oui je reprends tout depuis le début)
Hors ligne
ah je n'avais pas vue ta réponse, excuse moi
Hors ligne
La commande COPY fonctionne pour une seule table, il faudra donc un COPY par table.
Le message d'erreur que vous indiquez dit que le propriétaire du serveur (généralement "postgres") n'a pas le droit de lire le fichier. Vérifier les droits sur ce fichier et sur le répertoire où il est stocké.
Guillaume.
Hors ligne
vous pourriez m'expliquer comment utiliser la commande COPY ? car je cherche partout mais je ne voi que ça :
COPY nom_table [ ( colonne [, ...] ) ]
FROM { 'nom_fichier' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
COPY { nom_table [ ( colonne [, ...] ) ] | ( requête ) }
TO { 'nom_fichier' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]
où option fait partie
de :
FORMAT nom_format
OIDS [ oids ]
DELIMITER 'caractère_délimiteur'
NULL 'chaîne_null'
HEADER [ booléean ]
QUOTE 'caractère_guillemet'
ESCAPE 'caractère_échappement'
FORCE_QUOTE { ( colonne [, ...] ) | * }
FORCE_NOT_NULL ( colonne [, ...] )
mais c'est quoi ce [ ( colonne [, ...] ) ] ou encore | STDIN } etc... et que dois-je mettre dans ma commande exactement ?
Hors ligne
Généralement, si vous avez un fichier CSV, ça doit donner quelque chose comme : COPY nom_table FROM '/chemin/fichier.csv';
Si jamais le nombre de colonnes du fichier CSV diffère du nombre de colonnes de la table, alors il faudra préciser la liste des colonnes après le nom de la table et entre parenthèses. Vous avez des exemples sur la doc : http://docs.postgresql.fr/9.6/sql-copy.html
Guillaume.
Hors ligne
ah maintenant que j'ai bien compris comment marcher postgre et sa commande copy (car comme je l'ai dit je suis nouveau et vraiment ça change de MySQL qu'on nous fait bouffer depuis le début du lycée XD),
lorsque j'entre la commande pour ouvrir le fichier BAM !!! je ne peut pas entrer mes données car il y à des éerreurs, j'ai du mal exporté mes données (les tables et les champs sont exactements pareils) car je ne connait pas vraiment la différence entre MySQL et PostgreSQL au niveau du SQL
par exemple, mon erreur actuelle est :
ERREUR: syntaxe en entrée invalide pour l'entier : « [chiffre];[nom];[adresse]@[mail].fr;[pseudo];[MDP];[nombre];[nombre];[texte];[texte] » CONTEXT: COPY [nom_able], ligne 1, colonne [nomtable] : « [chiffre];[nom];[adresse]@[mail].fr;[pseudo];[MDP];[nombre];[nombre];[texte];[texte] » Dans l'instruction : COPY [nom_able] FROM 'C:\\[chemin]\\[etc...]\\[mon_fichier].csv'
Hors ligne
Il ne faut pas utiliser de crochet.
Dans la documentation, [ element ] signifie que l'élément est facultatif, et { a | b } signifie que vous pouvez utiliser soit a soit b. Et ,... signifie que vous pouvez préciser plusieurs éléments, séparés par des virgules.
Donc par exemple « COPY [ (colonne[, ...]) ] » signifie "Soit COPY, soit COPY (colonne), soit COPY (colonne1, colonne2,...)
Julien.
https://rjuju.github.io/
En ligne
pour le coup, d'où pourrai provenir mon message d'erreur ?
car je ne sais pas comment exporter mes données mysql en potgres
j'ai tenter :
Colonnes séparées par : ,
Colonnes entourées par : '
Caractère d'échappement : \\
Lignes terminées par : AUTO
Remplacer NULL par : NULL
Enlève les caractères de fin de ligne à l'intérieur des colonnes (non)
Afficher les noms de colonnes en première ligne (non)
et lorsque j'insère mon fichier grâce à COPY ça ne marche toujours pas, je ne connai pas les différences de syntaxes entre mysql et potgre (je n'ai trouver aucune doc là dessus ^^")
en tout cas (malgrès mes lacunes) je trouve que postgre est beaucoup mieux développer que mysql (plus d'options etc...) et je pense que je vais beaucoup m'intéresser à ce SGBD (par contre il me reste 1 semaine pour transvaser mes données avant la fin de mon stage et je bloque alors que pourtant je sais que je ne devrai pas rencontrer de dificultés à ce nieau là)
Dernière modification par rygegor (07/06/2017 11:32:43)
Hors ligne
Si vous voulez qu'on puisse vous aider, vous devez donner la requête SQL exécutée ainsi que le message d'erreur. Là, on n'a que le message d'erreur et ça ne suffit pour être précis dans notre réponse.
Guillaume.
Hors ligne
COPY public.om_utilisateur FROM 'C:\\Users\\[profil]\\Desktop\\opencourrierr.csv\\opencourrier_table_om_utilisateur.csv'
:
voilà la requete qui m'affiche comme merssage d'érreur
:
ERREUR: syntaxe en entrée invalide pour l'entier : « 4;[NOM_en_majuscule];[pseudo]@live.fr;[pseudo];891173d5aea407175fb014efa32a9796;5;1;db;* »
CONTEXT: COPY om_utilisateur, ligne 1, colonne om_utilisateur : « 4;[NOM_en_majuscule];[pseudo]@live.fr;[pseudo];891173d5aea407175fb014efa32a9796;5;1;db;* »
Hors ligne
et on peut avoir la structure de la table qui accueille les données dans postgresql ? (nom et type de donnée de chaque colonne) ?
Cordialement,
Sébastien.
Hors ligne