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?
Ce qui suit devrait le faire:
-D
) pour votre service ou via la variable d'environnement PGDATA
.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:
pg_dumpall
) base de donnéesRé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
[documents postgres] pg_dumpall
[Arch Linux docs] vidage et rechargement manuel