NOT: Bunu 9.1'de test ettim. Buralarda hiç 9.0 sunucum yok. 9 da olsa çalışacağına eminim önceden eminim.
DİKKAT (@erny tarafından yorumlarda belirtildiği gibi):
Note that high CPU load due to I/O operations may be expected.
Geçici bir masa boşluğu kullanarak hemen hemen hiç çalışma yapmadan bunu yapabilirsiniz. Arıza süresi özel kilitler şeklinde olacaktır. Ama sadece masada süpürge yapıyorsun. Dolayısıyla, gerçekleşecek olan tek şey, müşteri sorgularının söz konusu tabloya erişmeleri durumunda kilidin alınmasını beklemektir . Mevcut bağlantıları kapatmanıza gerek yok.
Dikkat edilmesi gereken bir şey, masayı hareket ettirmenin ve boş olanı önce özel bir kilit beklemelerinin gerekmesidir!
İlk önce, belli bir miktar ek depolamaya ihtiyacınız var. Yorumlarda da belirtildiği gibi Stéphane
, söz konusu tablonun VACUUM FULL
tam kopya olarak en az iki katı büyüklükte olması gerekir . Şanslıysanız ve makineye dinamik olarak bir disk ekleyebiliyorsanız, bunu yapın. En kötü durumda, sadece bir USB disk takabilirsiniz (yine de riskli ve yavaş)!
Ardından, yeni cihazı bağlayın ve tablo alanı olarak kullanılabilir duruma getirin:
CREATE TABLESPACE tempspace LOCATION '/path/to/new/folder';
Aşağıdaki tabloları kullanarak aşağıdaki tabloları kolayca listeleyebilirsiniz:
\db
Tablonuzun geçerli tablo alanını iki kez kontrol edin (nereye geri götüreceğinizi bilmeniz gerekir):
SELECT tablespace FROM pg_tables WHERE tablename = 'mytable';
Eğer öyleyse NULL
, varsayılan tablo alanında olacaktır:
SHOW default_tablespace;
Eğer o ise NULL
de, bu olasılığı artacaktır pg_default
(kontrol resmi belgeler değiştiyse durumunda).
Şimdi masaya geç.
ALTER TABLE mytable SET TABLESPACE tempspace;
COMMIT; -- if autocommit is off
Vakumla:
VACUUM FULL mytable;
Geri taşı:
-- assuming you are using the defaults, the tablespace will be "pg_default".
-- Otherwise use the value from the SELECT we did earlier.
ALTER TABLE mytable SET TABLESPACE pg_default;
COMMIT; -- if autocommit is off
Geçici boşluğu kaldırın:
DROP TABLESPACE tempspace;