web-dev-qa-db-fra.com

pg_dump / pg_restore: différente version postgreSQL, un autre nom de base de données, un autre espace de table

Je vais proposer une base de données de l'ancien serveur en un nouveau.

  • l'ancien gère PostgreSQL 9.1, le nouveau a 9.3.
  • Je veux changer le nom de la base de données.
  • Je veux que la nouvelle base de données soit dans un espace de table dédié (l'ancien est en défaut) - y compris les indices, etc.

Malheureusement, je n'ai aucune chance d'expérimenter (et du disque dur de l'ancien serveur commencer à échouer) pour que je demande les options pour pg_dump/pg_restore qui fonctionnerait dans mon cas.

6
saabeilin

J'ai terminé la migration sans problèmes.

Créer le décharge est facile:

Sudo -u postgres pg_dump --verbose --no-tablespaces --format=directory --file=/backup/path old_database_name

Restauration sur une nouvelle instance: d'abord, créez une nouvelle épisette de table et une base de données cible dans cette épisette. Ensuite, importez votre vidage comme ceci:

Sudo -u postgres pg_restore --verbose --dbname=new_database_name --jobs=8 /backup/path/

Vous pouvez ajuster le nombre d'emplois simultanés dépendant de votre matériel de processeur, des performances de sous-système d'E/S, etc.

Nous avons maintenant toutes les données dans une autre base de données, avec un nom différent, dans un espace de table dédié, sur un nouveau serveur qui exécute plus récent PostgreSQL.

6
saabeilin

Puisque vous utilisez pg_dump, il videra le schéma et les données.

pg_dump -d mydb -f dump_file_name.sql

Pour restaurer, vous devez avoir à createdb d'abord, puis le restaurer ainsi, le nouveau problème de nom peut être résolu lors de la création de la nouvelle base de données.

createdb mynewdb

Pour l'espace de table, vous devez d'abord créer l'espace de table dans la base de données nouvellement créée.

create tablespace 'your_tablespace' location 'your_tablespace_location'

Puis modifiez le fichier de vidage (benned_file_name.sql) créé avec pg_dump et modifier SET default_tablespace = '' à SET default_tablespace = 'your_tablespace'.

Enfin, vous pouvez restaurer avec:

psql -d mynewdb -f dump_file_name.sql

2
Fabrizio Mazzoni