J'ai besoin de dupliquer la base de données existante, y compris son schéma et sa structure, vers une autre nouvelle base de données. J'ai besoin de cela dans l'environnement de commande Shell et non dans pgadmin. Merci de bien vouloir m'aider.
Nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
mon utilisateur est "postgres"
Nohup psql exampledbclone_01 < example-01.sql
$ pg_dump mydb > db.sql
$ psql -d newdb -f db.sql
Si vous souhaitez le dupliquer dans la même installation PostgreSQL et que vous n'avez pas d'utilisateurs connectés activement, il existe un raccourci pratique:
CREATE DATABASE my_new_database TEMPLATE my_old_database;
ou depuis le Shell
createdb -T my_old_database my_new_database;
Sinon, vous devrez utiliser pg_dump
, createdb
et pg_restore
, par exemple.
pg_dump -Fc -f olddb.pgdump -d olddb &&\
createdb newdb &&\
pg_restore -d newdb olddb.pgdump
Si vous utilisez Nohup
pour que la commande ne meure pas si vous perdez votre session ssh, pensez plutôt à utiliser screen
.
Postgres permet d'utiliser n'importe quelle base de données existante sur le serveur comme modèle lors de la création d'une nouvelle base de données. Je ne sais pas si pgAdmin vous donne l'option dans la boîte de dialogue de création de base de données, mais vous devriez pouvoir exécuter ce qui suit dans une fenêtre de requête si ce n'est pas le cas:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Pourtant, vous pouvez obtenir:
ERREUR: la base de données source "originaldb" est en cours d'accès par d'autres utilisateurs
Pour déconnecter tous les autres utilisateurs de la base de données, vous pouvez utiliser cette requête:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();