PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#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

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"}

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.

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.

?

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 ?

Hors ligne

Pied de page des forums