it-swarm-eu.dev

Přesouvání dat postgresql na jiný disk

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?

21
codecool

Měli byste to udělat:

  1. Vypněte PostgreSQL
  2. Ujistěte se, že PostgreSQL již neběží
  3. Zkontrolujte, zda je PostgreSQL opravdu zastaveno
  4. Zkopírujte starý datový adresář na novou jednotku
    Toto je obvykle definováno pomocí parametru příkazového řádku (-D) pro vaši službu nebo prostřednictvím proměnné prostředí PGDATA.
  5. Aktualizujte konfiguraci PostgreSQL (služba, prostředí var) tak, aby ukazovala na nový datový adresář.
  6. Pokud jste data zkopírovali, přejmenujte starý datový adresář, abyste se ujistili, že je PostgreSQL již nemůže najít. Tímto způsobem se zobrazí chybová zpráva, pokud jste nedostali konfiguraci správně.
  7. Spusťte službu
  8. Pokud vše funguje dobře, můžete starý adresář odstranit.
20
  1. Zastavte službu 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. Změna datového adresáře do adresáře destination_data_data v postgresql.conf
  6. pg_ctl start
4
adi

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íš:

  • export (pg_dumpall) databáze
  • vytvořit nový adresář EMPTY
  • upravit soubor postgresql.conf
  • restartujte serverovou službu postgres
  • načíst stará data ze souboru výpisu do nové databáze

Souhrn 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

0
Victoria Stuart