Nach längerer Pause heute mal etwas ganz Spezielles: wie bekomme ich mehrere PostgreSQL Datenbank-Instanzen auf einem Rechner zum Laufen?!
Die Suche im Internet offenbarte zuerst eine Lösung mit Anpassen der Start/Stop-Skripte, was ich nicht sonderlich "professionell" fand. Kurz darauf stieß ich auf die im DEB-Paket enthaltenen Skripte für die Clusterverwaltung. Bingo! Das war genau das wonach ich suchte. Die von der Paketverwaltung gemanagten Pakte werden hierbei nicht zerbrochen.
Nun aber mal los:
sudo apt-get install postgresql
Hiermit wird PostgreSQL und alle notwendigen Pakete installiert. Aktuell ist die Version 8.3.
Die Default-Konfiguration befindet sich unter /etc/postgresql/8.3/main. Diese ist so ganz in Ordnung und muß nicht angepaßt werden, da ich für Entwicklungszwecke mich nur von localhost verbinde.
Jetzt fehlt uns noch die zweite Instanz, welche Ihre Daten-Files aufgrund der zu erwartenden Größe auf einer externe Festplatte haben soll. Die externe Platte wurde mit ext2 formatiert. Bei FAT32 gab es einen häßlichen Fehler:
install: cannot change owner and permissions of „/media/lacie/pg-data“: Operation not permitted Error: could not create data directory; you might need to run this program with root privileges
Grund ist hier, dass FAT32 keine Linux-Berechtigungen abbilden kann.
Da wir ja nun wissen, dass wir nicht FAT32 nehmen dürfen, haben wir eine "richtige" Platte und können los legen:
compuscitor@schlepptop:~$ sudo pg_createcluster -d /media/lacie/pg-data -p 5433 --start-conf=manual 8.3 big
Was passiert hier? Wir legen einen neuen Cluster mit dem Namen big an, welcher auf Port 5433 läuft und seine Daten in /media/lacie/pg-data ablegen soll. Desweiteren soll er nicht automatisch starten, sondern nur von Hand (manual), da die externe Festplatte ja nicht immer angesteckt ist.
Der neue Cluster wird mittel pg_ctlcluster gestartet:
sudo -u postgres pg_ctlcluster 8.3 big start
Beim Versuch den neuen Cluster über den Port aufzurufen, kommt es zu einem Fehler:
compuscitor@schlepptop:~$ sudo -u postgres psql -p 5233 postgres psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5233"?
Eine Verbindung zu einem Cluster wird so aufgebaut:
sudo -u postgres psql --cluster 8.3/big postgres
Quellen: