data/base Ordner auf mehrere Laufwerke aufteilen?

Hallo,
ich habe relativ wenig Ahnung von der Materie also bitte um Verzeihung wenn meine Frage dumm ist :wink:

Ich würde gerne einzelne Datenbanken auf ein anderes Laufwerk verschieben. Also bspw. base Ordner 1234 auf C: und base Ordner 4567 auf D:

Ich habe Postgres 8.3 auf einem Windows 7 System.

Ist das irgendwie möglich?

Danke und Gruß
Peter

Ja, über Tablespaces. Einfach mehrere Tablespaces anlegen und die entsprechenden Tabellen verteilen.

Wie castorp sagt: über Tablespaces.
Dabei kannst du aber keine OIDs angeben sondern verschiebst die Tabellen anhand des Namens auf den jeweiligen Tablespace.

vielen Dank schonmal für den Hinweis mit den tablespaces. Das hat ausgezeichnet funktioniert … zumindest für die lokalen Laufwerke.

Ein Problem habe ich jedoch noch: ich würde gerne eine datenbank auf meinem NAS speichern. Das erzeugen der tablespaces auf dem NAS funktioniert soweit gut. Die Tablespace wird einwandfrei erzeugt. Sobald ich jedoch eine Datenbank mit dieser tablespace verlinken möchte erhalte ich die Fehlermeldung: “ERROR: could not create directory ‘pg_tblspc/xxxx’: No such file or directory”.

Beim Versuch diese tablespace zu löschen kommt die gleiche Fehlermeldung.

Da braucht es wohl ein paar mehr Details.

Was für ein NAS? Wie ist das genau angebunden? Gibt es das Verzeichnis denn auf dem NAS, das dort angelegt wurde?

das NAS ist ein QNAP SS-839 Pro. Es ist über einen DLink Router mit dem gesamten Netzwerk verbunden. Es existieren auf dem NAS öffentliche Ordner, die für jeden User im Netzwerk freigegeben sind (ich habe trotzdem im NAS einen Benutzer mit namen “postgres” und passwort “xxxx” erstellt).

Nach dem erstellen des tablespace schreibt postgres eine Datei namens “PG_VERSION” in den gewünschten Ordner´auf dem NAS. Ich vermute daher, dass die Berechtigungen ausreichend vorhanden sind(?)

Das beantwortet weder meine Frage, wie das NAS (genau) angebunden ist, noch ob das gesuchte Verzeichnis vielleicht vorhanden ist.

Der Typ des Routers interessiert maximal sekunder, über welches Protokoll spricht die Datenbank mit den NAS?

sorry … dann hab ich dich missverstanden. Die ganze Materie ist ziemlich neu für mich. Ehrlich gesagt habe ich keine Ahnung über welches Protokoll die Datenbank mit dem NAS spricht. Alles was ich weiss ist, dass auf dem NAS ein Linux läuft mit einer EXT4 Dateistruktur.

Auf einem PC ist die postgresql Datenbank installiert und das NAS ist auf diesem PC über die Netzlaufwerk Funktion von Windows eingebunden.

Leider habe ich nicht ganz verstanden was du mit “gesuchtes Verzeichnis vielleicht vorhanden” meinst.

Gruß

Hmm, wie wäre es, wenn du erst mal klärst, wie die Datenbank bzw. der Datenbankserver mit dem NAS spricht?
Wenn das SMB ist - das ist ungünstig für Datenbanken.

Du sollst außerdem auf dem NAS schauen, ob das Verzeichnis, das die Datenbank sucht, dort vorhanden ist.
Das grenzt den Fehler insoweit ein als das man sehen kann, ob der Server aufgrund Übertragungsproblemen entsteht.

Ach ja, wurde an dem NAS irgendwas geändert? LUNs entfernt oder hinzugefügt? Daten umgezogen? Verzeichnisse verschoben?

vielen Dank für deine Geduld … also da das NAS mittels Windows Netzlaufwerk auf dem Win7 PC eingebunden ist vermute ich einfach mal, dass es das SMB Protokoll ist (wie kann ich das herausfinden?). Auf dem NAS wurden keine Veränderungen vorgenommen. Ich habe lediglich ein Verzeichnis mit dem Namen “test” erstellt.

wenn ich ein tablespace erzeuge kann ich in pgadmin folgende werte eintragen:

Name: test
Ort: //NAS/Public/test
Eigentümer: postgres

Nach Erzugen der tablespace wird auf dem NAS im Verzeichnis Public/test die Datei “PG_VERSION” abgelegt.

Gleichzeitig wird auf dem Win7 PC (auf dem postgres läuft) im Verzeichnis postgres/data/pg_tblspc ein Ordner angelegt mit dem Namen der OID, der grade erzeugten tablespace (der Ordner hat das Windows Symbol einer Verknüpfung). Dieses Verzeichnis wird auch in der ERROR Message beim doppen der tablespace genannt.

Wenn ich versuche diesen Ordner zu öffnen erhalte ich von Windows die folgende Fehlermeldung: “auf C:\postgres\data\pg_tblspc\oid_nummer kann nicht zugegriffen werden. Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.”

Wohin zeigt denn die Verknüpfung genau?
Ich weiß leider nicht, wie PostgreSQL das mit Tablespaces unter Windows genau handhabt. Ich setze PostgreSQL nur unter Unix ein.

Hat einer von den Windows Anwendern hier dazu eine Idee?

Wenn ein Verknüpfungssymbol angezeigt wird, wird der Ordner als Junction/Dateisystemverknüpfung angelegt, das funktioniert ab Windows Vista analog zu symbolischen Links (ln -s). Infos dazu hier: Symbolische Verknüpfung

Gruß aus Kanada,

murphy

Hallo,

der tip mit den Symbolischen Links war Gold wert. In der Konsole kann ich mir den Zielort anzeigen lassen, der wie folgt aussieht:
" OIDNummer [??\\NAS\Public\test]"

offensichtlich ist also die Symbolische Verknüpfung fehlerhaft. Also habe ich die fehlerhafte Verknüpfung gelöscht und in der Konsole eine neue erstellt:
“mklink /D OIDNummer \NAS\Public\test”

Das hat das Problem behoben (erklärt aber nicht warum postgres eine fehlerhafte Verknüpfung erstellt).

Allen vielen Dank für die sehr hilfreiche Unterstützung!