Eine PostgreSQL-Datenbank auf einer anderen Festplatte als meinem System unter OS X einrichten?


7

Ich bin unter OS X 10.8.3, habe PostgreSQL von Macports installiert, aber festgestellt, dass auf meinem Systemlaufwerk nicht genügend Speicherplatz für die Datenbank vorhanden ist, die ich mit Daten füllen werde.

Gibt es eine Möglichkeit, eine neue Datenbank auf einem anderen Laufwerk / einer anderen Partition zu erstellen (nicht auf dem System, auf dem postgres installiert ist)?

Wie kann ich das machen?

Antworten:


6

Erstellen Sie die neue Datenbank und erstellen Sie dann einen Tabellenbereich auf Ihrem externen Laufwerk:

CREATE TABLESPACE mytablespace LOCATION '/Volumes/externaldisk/pg';

Ändern Sie dann die Datenbank so, dass der neue Tabellenbereich der Standardspeicherort dafür ist:

ALTER DATABASE MYDB TABLESPACE mytablespace;

Die andere Möglichkeit besteht darin, einfach Ihr gesamtes Postgres-Datenverzeichnis auf das externe Laufwerk zu verschieben und das externe Laufwerksverzeichnis dann symbolisch wieder mit dem ursprünglichen Speicherort zu verknüpfen.

Wenn Sie mehrere Tabellenbereiche auf mehreren Laufwerken erstellen möchten, können Sie mithilfe des Parameters TABLESPACE in der Erstellungs-DDL auch angeben, in welchem ​​Tabellenbereich sich eine Tabelle oder ein Index befinden soll.


Sie brauchen den symbolischen Link nicht wirklich. Sagen Sie einfach pg_ctlmit dem -DSchalter , wo sich das Datenverzeichnis befindet . Ich weiß nicht, wie Postgres unter OSX gestartet wird, daher kann ich nicht sagen, wo dies konfiguriert ist.
a_horse_with_no_name

Genau das gleiche. Ich fand einen symbolischen Link nett und transparent und brauchte keine Konfigurationsänderungen.
Philᵀᴹ

1
Tablespaces auf Wechseldatenträgern sind eine ziemlich schlechte Idee, meine Daten zu essen. Wirklich nicht zu empfehlen. Die PostgreSQL-Dokumentation macht nicht so deutlich, wie es sollte, dass Tablespaces integraler Bestandteil der Datenbank sind. Wenn Sie einen Tablespace verlieren, können Sie ihn nicht einfach löschen und den Rest der Datenbank weiter verwenden. Das Entfernen nur eines Tabellenbereichs und das Aufrechterhalten des Restes der Datenbank können alle möglichen aufregenden Konsequenzen für die Datenverarbeitung haben.
Craig Ringer

Ich verwende eine Datenbank für Performance-Bashing usw., war also nicht gestört, ob die Datenbank überlebt hat oder nicht. Wenn ich hier schreibe, dass die betreffende Datenbank auf ein externes Laufwerk verschoben wurde, habe ich das Laufwerk vom Computer getrennt, während postgres mit der Datenbank verbunden war. Ich habe neu gestartet, ohne dass das Laufwerk verbunden war. Ich habe das Verzeichnis an einen anderen Speicherort kopiert Ein anderes Laufwerk hat dann den Symlink ( Anweisungen ) aktualisiert, während es ausgeführt und mit der Datenbank verbunden wurde, und die Datenbank hat alles überlebt.
Chris

Denken Sie, dass die Antwort das SET-Wort verfehlt, dhALTER DATABASE dbname SET TABLESPACE spc;
Chris

8

Ich empfehle sehr stark , dass Sie nicht einen Tabellen auf einem externen Wechsellaufwerk setzen. Wenn die Tablespaces verschwinden (z. B. Laufwerk nicht angeschlossen), besteht die Gefahr einer schwerwiegenden Beschädigung der Datenbank , die nur schwer wiederhergestellt werden kann. Sie werden wahrscheinlich auch die Berechtigungsverwaltung als Herausforderung empfinden.

Sie sollten im Allgemeinen initdbeinen neuen Datenbankcluster auf dem Laufwerk erstellen und ihn dann mit starten pg_ctl. Wenn Sie pg_ctlmöchten, können Sie Ihre launchd-Eigenschaften ändern, um die Datenbank automatisch zu starten (dies erfordert ein Durcheinander mit Dateiberechtigungen), oder Sie können sie einfach manuell starten, wenn Sie sie verwenden möchten.

Es ist möglicherweise einfacher, das vorhandene Datenverzeichnis an den neuen Speicherort zu verschieben und entweder einen Symlink vom alten zum neuen Speicherort zu erstellen oder Ihre Startkonfiguration zu bearbeiten, um den PostgreSQL-Launcher anzuweisen, den neuen Speicherort zu suchen. Wenn Sie postgresql.confsich außerhalb des Datenverzeichnisses befinden, können Sie stattdessen einfach den data_directoryParameter in ändern postgresql.conf.

Weitere Informationen dazu initdbund pg_ctlzur Verwendung finden Sie im PostgreSQL-Benutzerhandbuch .

Um zu erfahren, wie Sie PostgreSQL so einrichten, dass Ihre neue Datenbank beim Booten gestartet wird, sollten Sie etwas über Dateiberechtigungen und Starteigenschaften lernen. Ich benutze OS X nicht viel, daher kann ich bei diesem Teil nicht viel helfen. Wenn Sie ratlos sind und etwas gelesen haben, um dies herauszufinden, sollten Sie auf der OSX-Stack-Exchange-Site um Hilfe bitten. Denken Sie daran zu erklären, was Sie versucht haben und was Sie bereits getan haben. Sie müssen dies nicht tun, wenn Sie es nur vom alten Speicherort aus verknüpfen.


Ist der Tabellenbereich nicht Teil des Datenverzeichnisses? Oder ist der Punkt, dass, wenn das Datenverzeichnis fehlt, die Datenbank nicht startet und somit nichts beschädigt?
kutschkem
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.