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
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
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.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Plus simple en tant que superutilisateur ( postgres
) avec une peer
autorisation sans alimentation dans pg_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 besoin pg_restore
.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Si vous êtes bloqué avec php, utilisez l'un ou l'autre des tics
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
ou la commande exec (). Pour le changement, vous pouvez utiliser sed de la même manière.
Voici 6 autres caractères
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.
Vous pourriez utiliser
CREATE DATABASE new_db TEMPLATE = old_db;
Supprimez ensuite tous les schémas dont vous n'avez pas besoin:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
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.
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 nouveau new_schema
schéma, comme user
dans la dbname
base de données:
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public
?