Wie benenne ich einen PostgreSQL-Cluster um?

8

Ich googelte und fand diese alte Webseite , auf der nur stand, um den Namen des Verzeichnisses zu ändern. Ich habe es versucht, aber es hat nicht funktioniert:

$ pg_lsclusters 
Version Cluster   Port Status Owner    Data directory                     Log file
8.4     main      5432 down   postgres /var/lib/postgresql/8.4/main       /var/log/postgresql/postgresql-8.4-main.log
9.1     main      50420 online postgres /var/lib/postgresql/9.1/main       /var/log/postgresql/postgresql-9.1-main.log$ pg_ctlcluster 9.1 main stop

$ pwd
/var/lib/postgresql/9.1

$ ls
main

$ mv main oldmain

$ pg_ctlcluster 9.1 oldmain start
Error: specified cluster does not exist

PostgreSQL 9.1.4, Ubuntu 11.10

Rob Bednark
quelle
Ich bin verwirrt. Ein PostgreSQL-Cluster hat keinen Namen.
a_horse_with_no_name
@a_horse_with_no_name, ich habe oben die Ausgabe von pg_lsclusters hinzugefügt. Ich bin neu in diesem Bereich, aber ich glaube, Sie können mehrere Cluster haben, und Sie müssen anhand des Namens (oder vielleicht des Verzeichnisnamens, ich bin mir nicht sicher) identifizieren, mit welchem ​​Cluster Sie sprechen.
Rob Bednark
@a_horse_with_no_name: Clusternamen sind spezifisch für die Architektur mit mehreren Versionen / Clustern in Debian, Ubuntu und Freunden. Ich hoffe, meine Antwort kann etwas Licht ins Dunkel bringen.
Erwin Brandstetter
@ErwinBrandstetter: danke das wusste ich nicht. Du lebst und lernst;)
a_horse_with_no_name

Antworten:

9

Update: Version 166 des postgresl-commonPakets hinzugefügt pg_renamecluster. Siehe Ilyas neue Antwort dazu .


In älteren Versionen (einschließlich Postgres 9.1.4 unter Ubuntu 11.10) ist der Name eines Clusters an den Namen des Datenverzeichnisses in der von Martin Pitt eingeführten "PostgreSQL-Architektur mit mehreren Versionen / mehreren Clustern" gebunden. Dies wird mit Debian-Paketen (Debian, Ubuntu und verwandte Distributionen) geliefert. Eine detaillierte Beschreibung der Architektur finden Sie unter:

/usr/share/doc/postgresql-common/README.Debian.gz

Oder durchsuchen Sie die Datei online hier.

Andere Installationen verfügen nicht über alle diese Funktionen, sodass einige Leute verwirrt sein können, wenn Sie über Clusternamen sprechen.

Das Umbenennen des Datenverzeichnisses funktioniert nicht, da Sie das Verzeichnis /etc/postgresql/<version>/<cluster>entsprechend ändern müssen .

Und es gibt ein paar Einstellungen in Ihrer postgresql.conf, die auch angepasst werden müssen. Führen Sie ein grep im Verzeichnis aus, um Folgendes anzuzeigen:

postgres@db:/etc/postgresql/9.1/main$ grep 'main' ./*
Erwin Brandstetter
quelle
Danke @Erwin_Brandstetter! Schöne ausführliche Antwort mit nützlichem Link zur Architektur von Martin Pitt. Ich werde Ihre Antwort versuchen.
Rob Bednark
Der Link zu people.debian.org/~mpitt/architecture.html funktioniert nicht mehr
a_horse_with_no_name
@a_horse_with_no_name: Danke, ich habe entsprechend aktualisiert.
Erwin Brandstetter
6

Debian / Ubuntu hat einen pg_renameclusterBefehl (verfügbar im "postgresql-common" -Paket), der genau das tut, was Sie brauchen:

  • benennt das Konfigurations- und Datenverzeichnis um,
  • benennt vorhandene Protokolldateien um,
  • ändert eine Reihe von Einstellungen in der postgresql.conf.

Manpage .

Hinweis für Systemd-Benutzer: Generatoren werden verwendet, um eine Einheitendatei (dh einen Dienst) für jeden PostgreSQL-Cluster zu erstellen. Nach dem pg_renameclustererneuten Laden der Systemd-Konfiguration sollten Sie den neuen Dienst aktivieren und starten: sudo systemctl daemon-reload sudo systemctl enable postgresql@<version>-<new cluster name>.service sudo systemctl start postgresql

Ilya
quelle
2
Es sollte erwähnt werden, dass pg_renameclusterdie instabile Version erst mit postgresql-common (166) im Februar 2015 hinzugefügt wurde . IOW: nicht verfügbar in Debian vor Jessie-Backports. Das ist Jahre, nachdem die Frage gestellt wurde und für Postgres 9.1 kaum anwendbar ist (obwohl Sie in der aktualisierten Infrastruktur einen veralteten S. 9.1-Cluster ausführen können ).
Erwin Brandstetter