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


20

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?


1
Les espaces disque logiques seraient la voie à suivre si vous vouliez déplacer une partie de vos bases de données vers un lecteur distinct.
Erwin Brandstetter

Cette réponse donne à penser que tablespacesdevrait pas aller sur un disque dur externe: dba.stackexchange.com/a/62037/41823 Je ne sais pas , je comprends le risque si vous mettez déjà les données sur un externe?
Statwonk

Réponses:


19

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.
    Il est généralement défini via un paramètre de ligne de commande ( -D) pour votre service ou via la PGDATAvariable d'environnement.
  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.

Au 4ème point, que voulez-vous dire par «Ceci est généralement défini par un paramètre de ligne de commande ...»?
codecool

@codecool: il y a plusieurs façons de définir cela. Habituellement, cela fait partie de la définition du service. Mais cela dépend de votre système d'exploitation, de la distribution et des modifications personnelles.
a_horse_with_no_name

Cela a fonctionné mais j'ai utilisé le regedit au lieu de la ligne de commande pour Windows. Ouf. Mon disque était sur le point de manquer d'espace, mais maintenant je l'ai en toute sécurité ailleurs avec suffisamment d'espace.
trench

Voici un bel article de blog étape par étape avec des détails spécifiques, à jour pour Ubuntu et la version 9.5 DB: digitalocean.com/community/tutorials/…
JaakL

4
  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

Je suis content que vous vous souveniez de la chowncommande du nouveau dossier.
RolandoMySQLDBA

0

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_dumpallest 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_dumppour 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:

  • pg_dumpallbase de données export ( )
  • 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 de 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 .---


Les références

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.