Bagaimana cara memindahkan tablespace PostgreSQL?

12

Apakah ada cara untuk secara fisik memindahkan tablespace PostgreSQL 9.3 dari /old/dirke /new/dir? Saya hanya ingin mvdirektori dan memberi tahu PostgreSQL bahwa tablespace sekarang berada di /new/dir. Sepertinya ALTER TABLESPACEhanya memungkinkan Anda mengganti nama.

Saya ingin menghindari membuat tablespace baru dan memindahkan database ke sana. Saya berasumsi bahwa itu akan menjadi proses penyalinan lambat yang membutuhkan banyak waktu dan ruang disk. Saya juga ingin menghindari symlinking /old/dirke /new/dir.

kontextify
sumber
pindah / old / dir ke veryold / dir, mount baru / dir ke old / dir, salin data dari ver_old dir ke old / dir?
simplexio

Jawaban:

12

Saya berasumsi bahwa nama tablespace Anda adalah tblspc.

  1. Dapatkan Oid dari tablespace Anda
test = # SELECT oid, spcname DARI pg_tablespace WHERE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 baris)
  1. Hentikan postgres
$ pg_ctl -D $ PGDATA berhenti
  1. Pindahkan direktori dari yang lama ke yang baru
$ mv / old / dir / new / dir

atau

$ cp -r / old / dir / new / dir
$ rm -rf / old / dir
  1. Ubah tautan tablespace ke direktori baru
$ cd $ PGDATA / pg_tblspc
$ rm 24580
$ ln -s / new / dir 24580
  1. Mulai postgres
$ pg_ctl -D $ PGDATA mulai

Kemudian, Anda dapat melihat direktori tablespace telah berubah.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / baru / dir
(1 baris)
shx
sumber