PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 04/09/2019 12:44:14

null008
Membre

restauration database en écrasant l'existant

bonjour a tous

débutante en monde postgresql

j'ai sauvegardé a base de donnée  a travers pg_dump

pg_dump -d produit -U postgres -Ft -C >C:\BACKUP\Produit.sql

j'aimerai faire la restauration en écrasant l'existant

psql -U postgres -d produit  <C:\BACKUP\produit.sql 

résultat message d'erreur objet existant

SET
SET
SET
SET
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
ERREUR:  la relation « tbl_itemtransactions » existe déjà
ALTER TABLE
ERREUR:  la relation « tbl_itemtransactions_tranid_seq » existe déjà
ALTER TABLE
ALTER SEQUENCE
ALTER TABLE

merci pour vos aide

Hors ligne

#2 04/09/2019 13:39:35

dverite
Membre

Re : restauration database en écrasant l'existant

C'est l'option -c (c minuscule) ou --clean qu'il faut utiliser pour que les CREATE soient précédés de DROP dans le dump.

Hors ligne

#3 04/09/2019 14:00:22

null008
Membre

Re : restauration database en écrasant l'existant

oui ça était bien passer avec l'option --clean

mais au moment de l'opération du drop database j'ai ce message d'erreur

ERREUR:  la base de données « produit» est en cours d'utilisation par d'autres utilisateurs
DÉTAIL : 2 autres sessions utilisent la base de données.

alors comment avec l'option --clean je peut peut tuer les utilisateurs  connecté sur ma base

merci

Hors ligne

#4 04/09/2019 14:27:03

dverite
Membre

Re : restauration database en écrasant l'existant

On peut terminer des sessions avec pg_terminate_backend() qui prend en argument le PID de la session, mais une session ne pourra jamais faire un DROP database en étant elle-même connecté à cette base.

Si le but est de recréer la base entièrement, il est possible d'utiliser pg_dump -C -c (les 2) avec le format plain (donc pas de -Ft, laisser le format par défaut), et de jouer ça dans un psql connecté à une autre base. Par exemple la base nommée postgres. Exemple:


pg_dump -C -c mabase > dump-mabase.sql
psql -U postgres -d postgres -f dump-mabase.sql


Le dump va contenir des commandes du genre

DROP DATABASE mabase;
...
CREATE DATABASE mabase ...;
...
\connect mabase
...
puis les commandes de création des objets.


Mais il faut quand même que personne d'autre ne soit connecté à la base concernée quand on joue ce dump.

Hors ligne

Pied de page des forums