Jak przenieść obszar tabel PostgreSQL?

12

Czy istnieje sposób fizycznego przeniesienia obszaru tabel PostgreSQL 9.3 z /old/dirdo /new/dir? Chciałbym tylko zrobić mvkatalog i powiedzieć PostgreSQL, że obszar tabel jest teraz zlokalizowany /new/dir. Wygląda na to, ALTER TABLESPACEże pozwala tylko zmienić nazwę.

Chciałbym uniknąć tworzenia nowego obszaru tabel i przenoszenia do niego bazy danych. Zakładam, że byłby to powolny proces kopiowania, który wymaga dużo czasu i miejsca na dysku. Chcę również uniknąć dowiązania symbolicznego /old/dirdo /new/dir.

kontekstify
źródło
przenieść / stary / katalog do bardzo stary / katalog, zamontować nowy / katalog do starego / katalog, skopiować dane z katalogu ver_old do starego / katalog?
simplexio

Odpowiedzi:

12

Zakładam, że nazwa twojego obszaru tabel to tblspc.

  1. Uzyskaj Oid swojego obszaru tabel
test = # WYBIERZ oid, spcname FROM pg_tablespace GDZIE spcname = 'tblspc';
  oid | nazwa spc
------- + ---------
 24580 | tblspc
(1 rząd)
  1. Zatrzymaj postgres
$ pg_ctl -D $ PGDATA stop
  1. Przenieś katalog ze starego do nowego
$ mv / old / dir / new / dir

lub

$ cp -r / old / dir / new / dir
$ rm -rf / old / reż
  1. Zmień łącze obszaru tabel do nowego katalogu
$ cd $ PGDATA / pg_tblspc
24580 USD
$ ln -s / new / reir 24580
  1. Rozpocznij postgres
$ pg_ctl -D $ PGDATA start

Następnie możesz zobaczyć, że katalog obszaru tabel zmienił się.

test = # WYBIERZ pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / new / reż
(1 rząd)
shx
źródło