Dupliquer un schéma complet dans PostgreSQL, dans la même base de données

La problématique est simple :

Votre base de données comporte un schéma avec plusieurs tables, et pour une raison qui vous est propre vous souhaitez la dupliquer au sein de la même base.

Voici une solution simple :

Elle consiste tout d’abord à exporter le schéma concerné comme ceci :

pg_dump nom_base -n nom_schema -s -f nom_fichier.pgsql

Ou comme cela :

pg_dump nom_base -n nom_schema -f nom_fichier.pgsql

(La première commande exporte le schéma sans les données, tandis que la seconde exporte le schéma et son contenu.)

Ensuite, changer le nom du schéma dans le fichier obtenu :

sed -i s/nom_schema/nom_nouveau_schema/g nom_fichier.pgsql

Attention : Vérifiez quand même qu’il n’y a pas dans votre base des données comportant la chaîne de caractère « nom_schema », auquel cas il faudra être un peu plus subtile.

Enfin, réimporter le fichier :

spsql nom_base -f filename.pgsql

Source.

Ce contenu a été publié dans Astuces, Informatique, Internet. Vous pouvez le mettre en favoris avec ce permalien.

2 réponses à Dupliquer un schéma complet dans PostgreSQL, dans la même base de données

  1. tijan dit :

    Bonjour,
    Y a-t-il une possibilité de dupliquer le schéma complet, et de n’y transférer qu’un sous ensemble des données, tout en gardant strictement la structure et les relations ? (Par exemple, l’ensemble des données pour une seule commune)

    • Adrien dit :

      Dans ce cas je dupliquerais le schéma et les données, et ensuite j’enlèverais les données inutiles avec des requêtes du genre :

      DELETE FROM latablemachintruc WHERE idCommune <> 25042;

      (On vire tout ce qui se trouve dans la table, sauf les données correspondant à la commune ayant pour identifiant 25042.)

      C’est sûr que ça n’est très rapide si ça concerne des bases de données énormes. Mais je n’ai pas d’autre idée, comme ça, spontanément. Je connais assez peu PostgreSQL.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>