PostgreSQL tablo alanını nasıl taşırım?


12

Fiziksel olarak bir PostgreSQL 9.3 tablo taşımak için bir yolu var mı /old/dirhiç /new/dir? Sadece mvdizine ve PostgreSQL'e tablo alanının şu anda bulunduğunu söylemek istiyorum /new/dir. ALTER TABLESPACESadece yeniden adlandırmanıza izin veriyor gibi görünüyor .

Yeni bir tablo alanı oluşturmaktan ve veritabanını buna taşımaktan kaçınmak istiyorum. Bunun çok fazla zaman ve disk alanı gerektiren yavaş bir kopyalama işlemi olacağını varsayıyorum. Ben de sembolik bağlantılarını önlemek istiyorum /old/diriçin /new/dir.


/ old / dir dizinini veryold / dir dizinine taşı, yeni / dir dizinini eski dizinine / dir, ver_old dizininden eski dizin dizinine kopyala?
simplexio

Yanıtlar:


12

Tablo alanı adınızın olduğunu varsayıyorum tblspc.

  1. Masa alanınızdan Oid alın
test = # SELECT oid, spcname FROM pg_tablespace NEREDE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 satır)
  1. Postgres'i durdur
$ pg_ctl -D $ PGDATA durağı
  1. Dizini eskisinden yenisine taşı
$ mv / eski / dir / yeni / dir

veya

$ cp -r / old / dir / yeni / dir
$ rm -rf / eski / yön
  1. Tablo alanının yeni dizine bağlantısını değiştirme
$ cd $ PGDATA / pg_tblspc
24580 ABD doları
$ ln -s / yeni / dir 24580
  1. Postgres başlat
$ pg_ctl -D $ PGDATA başlat

Ardından, tablo alanının dizininin değiştiğini görebilirsiniz.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / Yeni / dir
(1 satır)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.