Jako cloudové prostředí používám AWS. Nainstaloval jsem PostgreSQL na stejnou jednotku jako svazek kořenové instance. Připojil jsem a připojil druhou jednotku k mé instanci. Nyní chci přesunout všechna data PostgreSQL na jiný disk. Jsem stále ve vývojovém režimu, takže mohu vymazat stará data, pokud v tomto okamžiku usnadní přenos. Jaký je nejlepší způsob, jak toho dosáhnout?
Je PostgreSQL tabulkový prostor něco, na co bych se měl podívat?
Měli byste to udělat:
-D
) pro vaši službu nebo prostřednictvím proměnné prostředí PGDATA
.Zde je popis, jak přesunout existující PostgreSQL databázi do nového umístění (složky, oddílu) na Arch Linuxu (tento postup by měl být podobný pro jiné distribuce Linuxu).
pg_dumpall
je nástroj pro zapisování (ukládání) všech PostgreSQL databází klastru do jednoho skriptového souboru. ... To se provádí voláním pg_dump
pro každou databázi v klastru. ...
Například:
## 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
Musíš:
pg_dumpall
) databázeSouhrn příkazů
Opouštím výzvy Shell (název hostitele ...), abych objasnil, v čem jsem Shell, když postupuji.
[[email protected] ~]$ postgres --version ## postgres (PostgreSQL) 11.2
[[email protected] claws]$ Sudo -u postgres -i
[[email protected] ~]$ pg_dumpall > /tmp/db.out
[[email protected] ~]$ psql
[postgres]# SHOW data_directory; ## /var/lib/postgres/data
[postgres]# exit
[[email protected] postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[[email protected] postgres]$ l postgresdb/ ## total 0
[[email protected] postgres]$ Sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[[email protected] postgres]$ Sudo systemctl status postgresql
...
May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[[email protected] ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[[email protected] ~]$ exit
[[email protected] postgres]$ Sudo vim /var/lib/postgres/data/postgresql.conf
## added line:
data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[[email protected] postgres]$ Sudo -u postgres -i
[[email protected] ~]$ psql
[postgres]# SHOW data_directory;
## /var/lib/postgres/data ## << Old dir; need to restart postgresql service
[postgres]# \q
[[email protected] postgres]$ Sudo systemctl restart postgresql
[[email protected] postgres]$ Sudo -u postgres -i
[[email protected] ~]$ psql
[postgres]# SHOW data_directory;
## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[[email protected] ~]$ psql -f /tmp/db.out postgres
SET
SET
SET
CREATE ROLE
ALTER ROLE
[ ... SNIP! ... ]
[[email protected] ~]$ exit
## Done! :-D
Příklad
Podívejte se na můj doprovodný blogový příspěvek Jak přesunout existující PostgreSQL databázi v Arch Linux , kde najdete komentovaný kód a výstup .---
Reference
[postgres docs] pg_dumpall
[Arch Linux Docs] Manual Dump and Reload