Wie verschiebe ich einen PostgreSQL-Tablespace?


12

Gibt es eine Möglichkeit, einen PostgreSQL 9.3-Tabellenbereich physisch von /old/dirnach zu verschieben /new/dir? Ich möchte nur mvdas Verzeichnis und PostgreSQL mitteilen, dass sich der Tablespace jetzt unter befindet /new/dir. Sieht so aus ALTER TABLESPACE, als könnten Sie nur umbenennen.

Ich möchte vermeiden, einen neuen Tabellenbereich zu erstellen und die Datenbank dorthin zu verschieben. Ich gehe davon aus, dass dies ein langsamer Kopiervorgang wäre, der viel Zeit und Speicherplatz erfordert. Ich möchte auch vermeiden SymLink /old/dirzu /new/dir.


/ old / dir nach veryold / dir verschieben, new / dir nach old / dir einbinden, Daten aus ver_old dir nach old / dir kopieren?
Simplexio

Antworten:


12

Ich gehe davon aus, dass Ihr Tablespace-Name lautet tblspc.

  1. Holen Sie sich Oid von Ihrem Tablespace
test = # SELECT oid, spcname FROM pg_tablespace WHERE spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 Reihe)
  1. Stoppen Sie Postgres
$ pg_ctl -D $ PGDATA stop
  1. Verschieben Sie das Verzeichnis von einem alten in ein neues
$ mv / alt / dir / neu / dir

oder

$ cp -r / alt / dir / neu / dir
$ rm -rf / old / dir
  1. Ändern Sie den Link des Tablespace in ein neues Verzeichnis
$ cd $ PGDATA / pg_tblspc
$ rm 24580
$ ln -s / new / dir 24580
  1. Starten Sie postgres
$ pg_ctl -D $ PGDATA starten

Dann können Sie sehen, dass sich das Verzeichnis des Tablespace geändert hat.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / new / dir
(1 Reihe)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.