Comment je peux copier mon public
schéma dans la même base de données avec la structure complète de la table, les données, les fonctions, fk, pk et etc.
Ma version de Postgres est 8.4
PS J'ai besoin de copier le schéma PAS la base de données
postgresql
Sigra
la source
la source
public
?Réponses:
Il n'y a pas de moyen simple de le faire dans pg_dump / pg_restore lui-même. Vous pouvez essayer ce qui suit si vous pouvez supprimer temporairement la base de données.
la source
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Plus simple en tant que superutilisateur (postgres
) avec unepeer
autorisation sans alimentation danspg_haba.conf
. Restaurer après avoir renommé le schéma original:psql my_db -f '/path/to/file.pgsql'
. Si vous avez un vidage SQL simple, vous n'en avez pas besoinpg_restore
.Si vous êtes bloqué avec php, utilisez l'un ou l'autre des tics
ou la commande exec (). Pour le changement, vous pouvez utiliser sed de la même manière.
Voici 6 autres caractères
la source
public
).En utilisant pgAdmin, vous pouvez effectuer les opérations suivantes. C'est assez manuel, mais c'est peut-être tout ce dont vous avez besoin. Une approche basée sur des scripts serait beaucoup plus souhaitable. Je ne sais pas dans quelle mesure cela fonctionnera si vous ne disposez pas d'un accès administrateur et si votre base de données est volumineuse, mais devrait fonctionner très bien sur une base de données de développement que vous avez juste sur votre ordinateur local.
Cliquez avec le bouton droit sur le nom du schéma que vous souhaitez copier et cliquez sur Sauvegarder. (Vous pouvez aller plus loin et choisir de simplement sauvegarder la structure au lieu des deux).
Donnez un nom au fichier de sauvegarde et choisissez également un format. (J'utilise habituellement Tar.)
Cliquez sur Sauvegarde.
Cliquez avec le bouton droit sur le schéma à partir duquel vous avez sauvegardé, cliquez sur Propriétés et renommez-le temporairement en quelque chose d'autre. (par exemple temprename )
Cliquez sur la racine des schémas et cliquez dessus avec le bouton droit de la souris dans le navigateur d'objets, puis cliquez sur créer un nouveau schéma et donnez au schéma le nom public . Ce sera le schéma dans lequel vous copiez depuis votre sauvegarde.
Cliquez avec le bouton droit sur le nouveau schéma public à partir de l'étape 5. et cliquez sur restaurer. Restaurez à partir du fichier de sauvegarde à l'étape 3.
Renommez le nouveau schéma public sous un nom différent (par exemple, newschema ).
Renommer schéma temprename changement de l' étape 4 de retour au nom d' origine.
la source
Vous pourriez utiliser
Supprimez ensuite tous les schémas dont vous n'avez pas besoin:
Le seul inconvénient est que toutes les connexions à old_db doivent être déterminées avant de pouvoir créer la copie (donc le processus qui exécute l'
CREATE DATABASE
instruction doit se connecter par exemple à template1)Si ce n'est pas une option, pg_dump / pg_restore est le seul moyen de le faire.
la source
développant la réponse de user1113185 , voici un flux de travail complet utilisant psql / pg_dump.
Ce qui suit exporte tous les objets de
old_schema
et les importe dans un nouveaunew_schema
schéma, commeuser
dans ladbname
base de données:la source