Vous n'êtes pas identifié(e).

#1 01/06/2017 11:36:12

rygegor
Membre

migration données MySQL vers PostgreSQL

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

#2 01/06/2017 11:37:39

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

ah, je précise aussi que c'est ma première utilisation de Postgre donc je ne comprends pas tout

Hors ligne

#3 01/06/2017 13:04:47

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

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 ?

Hors ligne

#4 01/06/2017 14:02:12

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#5 01/06/2017 14:07:50

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#6 01/06/2017 14:42:18

ruizsebastien
Membre

Re : migration données MySQL vers PostgreSQL

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

#7 01/06/2017 15:57:25

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

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).

Hors ligne

#8 02/06/2017 12:36:45

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#9 02/06/2017 15:04:44

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

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 ?

Hors ligne

#10 06/06/2017 12:36:33

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#11 06/06/2017 14:52:07

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

Si vous nous donner le message d'erreur exact et la commande COPY exacte, nous devriont pouvoir vous aider.

Hors ligne

#12 06/06/2017 15:32:51

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#13 06/06/2017 15:55:18

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#14 06/06/2017 16:17:13

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

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.

Hors ligne

#15 06/06/2017 16:20:46

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#16 06/06/2017 16:22:11

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

ah je n'avais pas vue ta réponse, excuse moi

Hors ligne

#17 06/06/2017 16:31:46

gleu
Administrateur

Re : migration données MySQL vers PostgreSQL

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

#18 06/06/2017 16:32:45

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#19 06/06/2017 16:57:48

gleu
Administrateur

Re : migration données MySQL vers PostgreSQL

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

#20 07/06/2017 10:25:29

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#21 07/06/2017 10:36:26

rjuju
Administrateur

Re : migration données MySQL vers PostgreSQL

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,...)

Hors ligne

#22 07/06/2017 11:27:43

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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 smile (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

#23 07/06/2017 21:43:38

gleu
Administrateur

Re : migration données MySQL vers PostgreSQL

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

#24 08/06/2017 09:24:18

rygegor
Membre

Re : migration données MySQL vers PostgreSQL

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

#25 08/06/2017 09:38:22

ruizsebastien
Membre

Re : migration données MySQL vers PostgreSQL

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

Pied de page des forums