Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 28/01/2016 12:12:37
- Geo-x
- Membre
Faire un pg_dump en modifiant le nom de la table
Bonjour @ tous.
Je souhaiterais copier une table d'une BDD1 > BDD2 en modifiant le nom de la table d’origine.
Pour ça j'utilise les commandes :
pg_dump -U postgres -h localhost -t TABLE1 BDD1 > dump.sql
psql -U postgres -h localhost -d BDD2 < dump.sql
Le problème c'est qu'il conserve le nom d'origine de ma table et je ne sais pas comment faire pour le modifier dès l'enregistrement.
Avez-vous une idée ?
Geo-x
Dernière modification par Geo-x (28/01/2016 12:13:28)
Hors ligne
#2 28/01/2016 12:20:46
- ruizsebastien
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Bonjour,
Le mieux est de faire un sed sur le fichier SQL.
sed -e 's/table_origine/new_table/g' dump.sql > dump_new.sql
Cordialement,
Sébastien.
Hors ligne
#3 28/01/2016 12:24:02
- Geo-x
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Bonjour Sébastien, merci de votre réponse.
Je suis sur serveur Windows (et oui personne n'est parfait ;-) ) et visiblement la commande 'sed' n'est pas reconnue.
Geo-x
Hors ligne
#4 28/01/2016 12:28:04
- ruizsebastien
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
ARRRGGG... démon sort de ce corps !!
avec powershell il doit être possible de faire un truc comme ça (à creuser) :
get-content dump.sql | %{$_ -replace "table_origine","new_table"}
Cordialement,
Sébastien.
Hors ligne
#5 28/01/2016 12:29:12
- Geo-x
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Ben c'est sûr que le démon est loin d'être parfait ...
Ok merci du coup de main, je test dès que possible !
Hors ligne
#6 28/01/2016 14:42:28
- gleu
- Administrateur
Re : Faire un pg_dump en modifiant le nom de la table
De toute façon, ça ne me semble pas être une excellente idée. Vous ne transformez pas le nom, vous transformez toute chaîne contenant ce mot. Si la table le contient dans un champ texte par exemple, vous le remplacez aussi.
Guillaume.
Hors ligne
#7 28/01/2016 14:43:32
- Geo-x
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
En effet ...
Hors ligne
#8 28/01/2016 16:19:09
- edlm
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Bonjour,
vous ne pouvez pas faire un simple ALTER TABLE OldName RENAME TO NewName après avoir récupéré la table d'origine tel que ?
Sinon, à l'inverse, il est peut être possible avant de lancer le dump de dupliquer dans BDD1 la table d'origine sous le nouveau nom souhaité:
CREATE TABLE NewName (LIKE OldName INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES);
INSERT INTO NewName SELECT * FROM OldName;
Voir la doc de CREATE et notamment les options possibles de la clause LIKE.
Il y a aussi la solution du COPY TO et COPY FROM.
Éric
Hors ligne
#9 28/01/2016 16:24:52
- Geo-x
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Et non, c'eut été trop beau !
L'idée c'est, par exemple, dans ma BDD1 j'ai une table TABLE1 que je dois mettre à jour avec une table TABLE2 présente dans la BDD2 et qui a le même nom que la TABLE1. Du coup il faudrait que je puisse copier cette TABLE2 dans la BDD1 pour faire la mise à jour sans écraser l'autre ou sans être gêné.
Jusqu'à maintenant je faisais avec un dblink ce qui me permettait de faire la modification du nom, mais le problème c'est qu'il faut déclarer les champs 1 par 1 et là ça devient un peu trop lourd à gérer.
Alors en effet, comme vous dite, ce que je peux toujours faire c'est renommer ma TABLE2 avant l'import mais c'est aussi ce que je voulais éviter.
Geo-x
Hors ligne
#10 28/01/2016 16:44:48
- ruizsebastien
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
et pourquoi pas un create table as select * from ma_table;
Puis pg_dump.
?
Cordialement,
Sébastien.
Hors ligne
#11 28/01/2016 16:45:53
- Geo-x
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Oui ça peut marcher également et je pense que je vais faire comme ça c'est encore plus simple !
Merci beaucoup pour votre aide !
Geo-x
Hors ligne
#12 28/01/2016 17:21:34
- edlm
- Membre
Re : Faire un pg_dump en modifiant le nom de la table
Je ne sais pas si l'option a été étudiée mais vous pouvez aussi déclarer dans la base1 un serveur distant vers la base2, créer une table distante (CREATE FOREIGN TABLE) et faire vos requêtes de mises à jour à partir de cette table distante.
C'est la solution la plus "clean" me semble t-il. Certes il y a une phase de mise en place mais pas délirante.
Éric
Hors ligne
#13 28/01/2016 19:26:07
- rjuju
- Administrateur
Re : Faire un pg_dump en modifiant le nom de la table
Sinon, importer dans un schéma différent ?
Julien.
https://rjuju.github.io/
Hors ligne
Pages : 1