1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut Comment exporter-importer une très grosse table d'un serveur à un autre

    Bonjour,

    Je cherche à copier une table d'un schéma à un autre, les deux bases étant sur des serveurs différents.
    J'ai donc dans un premier temps utilisé la fonction "sauvegarder" de pgAdmin III, qui m'a donné un fichier .backup de 1,35 Go.
    Lorsque je me connecte sur le second serveur, dans la table vide prête à accueillir les données je tente un "restaurer" en choisissant l'énorme fichier backup, et au bout de 2 h j'obtiens un plantage de mémoire qui met fin au processus.

    Aussi je me demande, est-ce bien de cette manière qu'il faut procéder pour cet objectif, ou pouvez-vous m'orienter vers une autre démarche ?
    J'ai bien vu la doc sur la sauvegarde SQL, mais si je comprends bien le pg_dump exporte toute une base, et moi je ne souhaite qu'une certaine table de cette base.

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 768
    Points
    768

    Par défaut

    Bonjour,

    Non, pg_dump vous permet de n'exporter que la table qui vous intéresse avec l'option -t (ou --table).
    Vous trouverez la documentation ici: https://www.postgresql.org/docs/9.6/...pp-pgdump.html

    Bonne fin de journée,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut

    Effectivement j'étais passé à travers cette option, merci.
    Du coup vaut-il mieux saisir ma commande dump dans la console PSQL ou plutôt en commande DOS en pointant vers pg_dump.exe ?

  4. #4
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 768
    Points
    768

    Par défaut

    Bonjour,

    Je ne pense pas que vous puissiez lancer un dump avec psql (mais je peux me tromper). [Edit]Vous parlez peut-être de la commande *\c qui fait un COPY des données dans un fichier ? Dans ce cas, il me semble que seulement les données sont copiées...[/Edit]
    De manière générale, j'utilise toujours l'outil original pour faire une action. Je conseille donc pg_dump pour faire un dump...
    Après, chacun fait comme il veut.

    Bonne journée,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut

    Bonjour,

    L'étape de l'export par pg_dump s'est bien passée, j'obtiens un fichier SQL qui me convient de cette façon :
    "C:\Program Files (x86)\pgAdmin III\1.22\pg_dump.exe" -h mon_serveur_1 -p 5432 -U user -W -Fc -t "mon_schema.ma_table" "ma_base" > "C:\dump.sql"

    En revanche, lorsque je tente l'import sur mon serveur 2 par pg_restore cela n'aboutit pas, la table n'est pas créé, et j'obtiens la suite d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pg_restore : implied data-only restore
    pg_restore : [archiver (db)] Error while INITIALIZING:
    pg_restore : [archiver (db)] coult not execute query: ERREUR; paramètre de configuration "lock_timeout" non reconnu
    Command was : SET lock_timeout = 0;
    pg_restore : [archiver (db)] coult not execute query: ERREUR; paramètre de configuration "row_security" non reconnu
    Command was : SET row_security = off;
    Voici ma commande :
    "C:\Program Files (x86)\pgAdmin III\1.22\pg_restore.exe" -h mon_serveur_2 -p 5432 -U user -W -d "ma_base" -t "mon_schema.ma_table" -v "C:\dump.sql"

    J'ai vu que la version PostgreSQL du serveur 1 (dump) est 9.4.5, alors que celle du serveur 2 (restore) est 9.1.10.

    J'imagine que le problème vient de là, mais une idée pour l'éviter ?

  6. #6
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 768
    Points
    768

    Par défaut

    Citation Envoyé par nicolas2603 Voir le message
    Bonjour,
    J'ai vu que la version PostgreSQL du serveur 1 (dump) est 9.4.5, alors que celle du serveur 2 (restore) est 9.1.10.

    J'imagine que le problème vient de là, mais une idée pour l'éviter ?
    Les solutions sont simples :
    1- Upgrader le serveur 2. C'est la meilleure solution, d'autant plus que la version 9.1 n'est plus maintenue.
    2- Installer la version 9.1 sur le serveur 1 et utiliser le pg_dump 9.1 pour exporter les données de la base en 9.5.

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut

    Je me doutais de cette réponse...
    Mais si je n'ai pas la possibilité de modifier les versions, et que chaque serveur doit rester tel quel !
    Je n'ai pas de solutions ?

  8. #8
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 768
    Points
    768

    Par défaut

    Non, tout n'est pas perdu!

    Vous pouvez installer une version 9.1 sur votre poste de travail et vous connecter à distance sur serveur 1, puis sur serveur 2.


    ... Je me doute bien que vous êtes rattrapés par la réalité, mais je vous conseille tout de même de souligner à l'écrit que conserver une version obsolète de PostgreSQL représente un risque pour:
    • la sécurité des données
    • la cohérence des données

    Il n'y aura pas de patch même sur les bugs anciens trouvés comme le bug sur le CIC par exemple...

    Bonne fin de journée,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut

    Merci beaucoup pour ces infos, mais étonnamment ma restauration vient de fonctionner en ligne de commande, que j'ai modifié ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files (x86)\pgAdmin III\1.22\pg_restore.exe" --host mon_serveur_2 --port 5432 --username "user" --dbname "ma_base" -W --data-only --table ma_table --schema mon_schema --verbose "C:\dump.sql"
    Je vais donc, je pense, pouvoir me passer d'une réinstallation et prise de main à distance !

    Cependant, avant de clôturer ce sujet, sauriez-vous m'éclairer sur la différence entre ces deux commandes de dump. J'obtiens deux fichiers d'une taille différente alors qu'il me semble que les arguments sont identiques, et seule la restauration de la version 1 fonctionne, la deuxième me mettant un message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # version 1
    "C:\Program Files (x86)\pgAdmin III\1.22\pg_dump.exe" -h mon_serveur_1 -p 5432 -U user -W -Fc -t "mon_schema.ma_table" "ma_base" > "C:\dump.sql"
     
    # version 2
    "C:\Program Files (x86)\pgAdmin III\1.22\pg_dump.exe" --host mon_serveur_1 --port 5432 --username "user" -W --format=c --dbname "ma_base" --table ma_table --schema mon_schema > "C:\dump.sql"
    Dans l'idée je souhaitais avoir deux lignes dump/restore formatée de la même manière !
    Merci

  10. #10
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 768
    Points
    768

    Par défaut

    C'est effectivement étrange.

    Êtes-vous sûr que le premier dump ne s'est pas arrêté avec un message d'erreur ?
    A bove ante, ab asino retro, a stulto undique caveto

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 565
    Points : 144
    Points
    144

    Par défaut

    Tout à fait sûr.
    Mes deux dump de test se terminent normalement, la version 1 donne un fichier de 6 832 Ko et se restaure, la version 2 donne un fichier plus gros de 6 907 Ko et ne se restaure pas !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/09/2015, 14h11
  2. [2005] Vider une très grosse table
    Par a4i.ludo dans le forum MS SQL-Server
    Réponses: 24
    Dernier message: 12/06/2013, 11h28
  3. comment exporter/importer une OU dans l'AD avec LDIFDE
    Par maikess dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 29/07/2010, 11h00
  4. Comment exporter / importer une table postgres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/03/2005, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo