web-dev-qa-db-fra.com

Déplacement des données postgresql vers un autre lecteur

J'utilise AWS comme environnement cloud. J'ai installé PostgreSQL sur le même lecteur que mon volume d'instance racine. J'ai attaché et monté le deuxième lecteur à mon instance. Maintenant, je veux déplacer toutes mes données PostgreSQL sur les différents disques. Je suis toujours en mode développement, je peux donc supprimer les anciennes données si cela facilite le transfert à ce stade. Quelle est la meilleure façon de procéder?

L'espace de table PostgreSQL est-il quelque chose que je devrais regarder?

21
codecool

Ce qui suit devrait le faire:

  1. Arrêtez PostgreSQL
  2. Assurez-vous que PostgreSQL ne fonctionne plus
  3. Vérifiez que PostgreSQL est vraiment arrêté
  4. Copiez l'ancien répertoire de données sur le nouveau lecteur
    Ceci est généralement défini via un paramètre de ligne de commande (-D) pour votre service ou via la variable d'environnement PGDATA.
  5. Mettez à jour votre configuration PostgreSQL (service, environnement var) pour pointer vers le nouveau répertoire de données.
  6. Si vous avez copié les données, renommez l'ancien répertoire de données pour vous assurer que PostgreSQL ne pourra plus les retrouver. De cette façon, vous obtiendrez un message d'erreur si vous n'avez pas obtenu la bonne configuration.
  7. Démarrez le service
  8. Si tout fonctionne bien, vous pouvez supprimer l'ancien répertoire.
20
  1. Arrêter le service postgresql
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user/destination_data_directory
  4. export PGDATA = destination_data_directory
  5. Modification du répertoire de données en destination_data_directory dans postgresql.conf
  6. pg_ctl start
4
adi

Voici une description de la façon de déplacer une base de données PostgreSQL existante vers un nouvel emplacement (dossier, partition), sur Arch Linux (cette procédure devrait être similaire pour les autres distributions Linux).

pg_dumpall est un utilitaire pour écrire (vider) toutes les bases de données PostgreSQL d'un cluster dans un fichier de script. ... Il le fait en appelant pg_dump pour chaque base de données du cluster. ...

Par exemple:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL/DR

Tu dois:

  • exportation (pg_dumpall) base de données
  • créer un nouveau répertoire VIDE
  • éditer le fichier postgresql.conf
  • redémarrer le service serveur postgres
  • charger les anciennes données du fichier de vidage dans la nouvelle base de données

Résumé des commandes

Je laisse mes invites Shell (nom d'hôte ...) pour clarifier dans quel Shell je suis au fur et à mesure.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ Sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ Sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ Sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ Sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ Sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ Sudo systemctl restart postgresql
[victoria@victoria postgres]$ Sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Exemple

Voir mon article de blog d'accompagnement, Comment déplacer une base de données PostgreSQL existante sur Arch Linux , pour le code commenté et la sortie .---


Références

0
Victoria Stuart