Aqui está uma descrição de como mover um banco de dados PostgreSQL existente para um novo local (pasta, partição), no Arch Linux (este procedimento deve ser semelhante a outras distribuições Linux).
pg_dumpall
é um utilitário para gravar (despejar) todos os bancos de dados PostgreSQL de um cluster em um arquivo de script. ... Isso é feito chamando pg_dump
cada banco de dados no cluster. ...
Por exemplo:
## 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
Você precisa:
pg_dumpall
banco de dados export ( )
- crie um novo diretório VAZIO
- editar arquivo postgresql.conf
- reinicie o serviço do servidor postgres
- carregar dados antigos do arquivo de despejo no novo banco de dados
Resumo dos comandos
Estou deixando minhas solicitações de shell (nome do host ...) para esclarecer em que shell estou enquanto prossigo.
[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
Exemplo
Veja minha postagem no blog, Como mover um banco de dados PostgreSQL existente no Arch Linux , para obter código e saída comentados .---
Referências