Verschieben des clusters oder neues cluster erstellen

Hallo,
ich hab das noch nicht ganz kappiert. Ich möchte eine postgres-postgis Datenbank – unter debian lenny – aufsetzen und weiß, dass die Datenmenge den Platz in meiner /var übersteigt. Deshalb habe ich eine leere Partition meiner Festplatte als /Daten eingehängt.
Ich hab mit

$ /usr/lib/postgresql/8.3/bin/initdb -W --lc-collate=C -D /Daten/pgsql/data

ein neues cluster erzeugt und den server mit

$ /usr/lib/postgresql/8.3/bin/postgres -D /Daten/pgsql/data/
LOG:  Datenbanksystem wurde am 2009-01-05 23:26:18 CET heruntergefahren
LOG:  Autovacuum-Launcher startet
LOG:  Datenbanksystem ist bereit um Verbindungen anzunehmen

gestartet.
Wie komme ich jetzt dort als user rauf und erzeuge eine Datenbank? Mit createdb … erzeuge ich doch eine datenbank die dann im cluster unter /var/lib… liegt, oder?
Oder sollte ich doch kein neues cluster erzeugen und den ordner unter /var/lib nach /Daten kopieren und einen symlink zurück nach /var/lib legen?
Danke
Torsten

Um das ganze etwas einfacher zu gestalten: wieso erstellst du keinen neuen Tablespace?

Dokumentation: CREATE TABLESPACE


Das dürfte dir die Arbeit um einiges vereinfachen.

Nein, Mit initdb erzeugst Du einen DB-Cluster, in diesem liegen dann die einzelnen Datenbanken.
Eine Instance von PG verwaltet einen Cluster.


Oder sollte ich doch kein neues cluster erzeugen und den ordner unter /var/lib nach /Daten kopieren und einen symlink zurück nach /var/lib legen?
Danke
Torsten

Je nachdem, was Du machen willst. Wenn vorhandene Daten erhalten bleiben sollen und nur weiterer Platz geschaffen werden soll, kannst Du das entweder mit dem kopieren und dem Symlink machen oder für neue Datenbanken/Tabellen/Indexe einfach neue Tablespaces auf Deiner neuen Platte nutzen. Mit verschiedenen Tablespaces zu arbeiten hätte zudem noch den Vorteil, schneller zu sein (Aufteilen von Tabellen und Indexe auf versch.Tablespaces und damit Platten)

.oO( kann es sein, daß Dir das aber auch schon gestern im IRC erklärt wurde? )


Andreas

Jetzt nachdem ich weiß, dass es so etwas gibt würde ich das gern machen. Ich weiß nur noch nicht wie. Wenn ich als # su postgres
$ CREATE TABLESPACE eingebe bekomme ich: bash: CREATE: command not found

Hab ich noch was vergessen zu installieren oder muss man das anders machen?
Danke
Torsten

Führe die entsprechenden Befehl mal in psql aus :wink:

Das “bash” sollte dich stutzig machen …

Du landest nach su - postgres in einer normalen Shell, hier der bash. In dieser mußt Du psql starten und in psql Dein CREATE TABLESPACE machen. Als Einzeiler:

su - postgres -c "psql template1 -c 'create tablespace ...'"

ungetestet, sollte aber gehen. Anschaulicher ist es aber, psql interaktiv zu benutzen.


Andreas

Danke Andreas,
ich bin bis jetzt davon ausgegangen, mit su postgres schon in einer postgres-shell zu sein.
Jetzt habe ich aber das Problem, das postgres und ich als user keine Schreibberechtigung zu haben scheine

postgres=# CREATE TABLESPACE digit OWNER torsten LOCATION '/Daten/pgsql/data'
;
FEHLER:  konnte Zugriffsrechte für Verzeichnis »/Daten/pgsql/data« nicht setzen: Die Operation ist nicht erlaubt

Der Ordner /Daten gehört aber mir als user. Zu welcher Gruppe gehört postgres und die postgresql-user per default auf einem debian?
Was ist grundsätzlich noch zu beachten wenn ich auf einem Speichermedium schreib- und lesezugriff als postgresuser haben will?
Danke
Torsten

Es muß dem gehören, der den Server-Prozeß laufen läßt: postgres, sowohl user als auch group.

Andreas

Ich muss mich hier mal einmischen: deine Probleme sind nur sehr bedingt auf PostgreSQL basierend. Du solltest schon wissen, wie man mit einem Unix-System umgeht, bevor du dich an dessen Nutzung (in dem Fall PostgreSQL) wagst.

All die Fehler, die du bisher hattest sind Probleme der Systemadministration, nicht der Datenbank.

Stimmt. Sie sind aber trotzdem, wenn auch nur bedingt, mit PostgreSQL verknüpft. Schön, dass Andreas mir mitteilte, dass das Verzeichnis dem gehören sollte der den Server-Prozess laufen läßt. Danke Andreas. Das ist dann wohl eher ein PostgreSQL auf einem System (hier Debian) Problem und konnte, soweit ich das sehe und sah, nicht mit Wissen über das BS behoben werden. Ich frag ja gar nicht wie ich die Eigentümer und Rechte der Dateien in meinem BS festlegen kann…

Ich bin halt absoluter Anfänger was Datenbanken im Allgemeinen und PostgreSQL im besonderen betrifft. Soll/kann ich das noch irgendwohin schreiben um nicht allzusehr zu nerven?

Danke für die Hilfe.
Torsten

Das wäre allerdings dann wirklich Offtopic, daher lese ich Dir die man-page von chown & chmod auch nicht vor.

Allgemein: versteh, daß es sich um einen Server handelt. Der kann ja auch woanders laufen als Dein Client (hier psql), und damit ist dann wohl auch klar, daß da ein anderer User für den Serverprozeß verantwortlich ist.

Ich bin halt absoluter Anfänger was Datenbanken im Allgemeinen und PostgreSQL im besonderen betrifft. Soll/kann ich das noch irgendwohin schreiben um nicht allzusehr zu nerven?

Danke für die Hilfe.
Torsten

Ich denke nicht, daß das notwendig ist.


Andreas

Das war bloß eine höfliche Form (wundert mich, das akretschmer dich nicht gleich auf die Doku verwiesen hat :wink: ) um auf diese Seite hinzuweisen:

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CREATE TABLESPACE

Dort sind die Parameter und die Bedingungen im einzelnen erklärt.



Das ist dann wohl eher ein PostgreSQL auf einem System (hier Debian) Problem und konnte, soweit ich das sehe und sah, nicht mit Wissen über das BS behoben werden.

Ich entschuldige mich, der Eindruck kam jedenfalls auf, da du vorher auch nichts mit der Fehlermeldung der Shell anfangen konntest.



Ich bin halt absoluter Anfänger was Datenbanken im Allgemeinen und PostgreSQL im besonderen betrifft.

Mal anders herum gefragt: was weisst du bereits und wo schaust du nach, wenn du auf Probleme stößt? Ist dir die umfangreiche Online Dokumentation bekannt?