Question Créer une copie d'une base de données dans PostgreSQL


Quelle est la bonne façon de copier toute la base de données (sa structure et ses données) dans une nouvelle base de données dans pgAdmin?


583
2018-05-18 07:00


origine


Réponses:


Postgres permet l'utilisation de n'importe quelle base de données existante sur le serveur en tant que modèle lors de la création d'une nouvelle base de données. Je ne suis pas sûr que pgAdmin vous donne l'option sur la boîte de dialogue de création de base de données, mais vous devriez être en mesure d'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;

Cependant, vous pouvez obtenir:

ERROR:  source database "originaldb" is being accessed by other users

Pour résoudre ce problème, 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();

900
2018-05-18 07:18



Une version de ligne de commande de La réponse de Bell:

createdb -O ownername -T originaldb newdb

Cela devrait être exécuté sous les privilèges du maître de base de données, généralement postgres.


255
2017-07-18 22:05



Pour cloner une base de données existante avec postgres, vous pouvez le faire

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

IT va tuer toute la connexion à la source db en évitant l'erreur

ERROR:  source database "SOURCE_DB" is being accessed by other users

94
2018-05-12 14:33



Je ne sais pas à propos de pgAdmin, mais pgdump vous donne un vidage de la base de données en SQL. Vous avez seulement besoin de créer une base de données par le même nom et faire

psql mydatabase < my dump

pour restaurer toutes les tables et leurs données et tous les privilèges d'accès.


46
2018-05-18 07:05



Dans l'environnement de production, où la base de données d'origine est sous le trafic, j'utilise simplement:

pg_dump production-db | psql test-db

46
2017-11-12 21:47



J'ai reconstitué cette approche avec les exemples ci-dessus. Je travaille sur un serveur "sous charge" et j'ai eu l'erreur quand j'ai tenté l'approche de @zbyszek. J'étais aussi après une "ligne de commande seulement" solution.

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users.

Voici ce qui a fonctionné pour moi (Commandes ajoutées à nohup déplacer la sortie dans un fichier et protéger d'une déconnexion du serveur):

  1. nohup pg_dump exampledb > example-01.sql
  2. createdb -O postgres exampledbclone_01

mon utilisateur est "postgres"


13
2018-06-12 17:21



Premier, sudo en tant qu'utilisateur de base de données:

sudo su postgres

Aller à la ligne de commande PostgreSQL:

psql

Créez la nouvelle base de données, donnez les droits et quittez:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

Copiez la structure et les données de l'ancienne base de données vers la nouvelle:

pg_dump old_database_name | psql new_database_name

13
2018-03-23 15:26



Dans pgAdmin, vous pouvez effectuer une sauvegarde à partir de votre base de données d'origine, puis créer une nouvelle base de données et restaurer à partir de la sauvegarde que vous venez de créer:

  1. Cliquez avec le bouton droit de la souris sur la base de données source, sauvegardez ... et sauvegardez dans un fichier.
  2. Clic droit, Nouvel objet, Nouvelle base de données ... et nommez la destination.
  3. Cliquez avec le bouton droit sur la nouvelle base de données, Restaurer ... et sélectionnez votre fichier.

10
2017-08-14 00:24



Quelle est la bonne façon de copier toute la base de données (sa structure et ses données) dans une nouvelle base de données dans pgAdmin?

Répondre:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

Essayé et testé.


9
2018-01-11 06:20



PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

6
2018-05-25 03:15