Da Sie nicht genügend Speicherplatz haben, um ein Vacumm auszuführen oder neu zu erstellen, können Sie Ihre postgresql-Datenbanken jederzeit neu erstellen, indem Sie sie wiederherstellen. Durch das Wiederherstellen der Datenbanken, Tabellen und Indizes wird Speicherplatz freigegeben und eine Defragmentierung durchgeführt. Anschließend können Sie eine automatische Wartung einrichten, um Ihre Datenbanken regelmäßig zu durchsuchen.
1 Sichern Sie alle Datenbanken auf Ihrem postgresql-Server
Sie möchten alle Ihre Datenbanken auf einer Partition sichern, die über genügend Speicherplatz verfügt. Wenn Sie unter Linux arbeiten, können Sie das Backup mit gzip weiter komprimieren, um Speicherplatz zu sparen
su - postgres
pg_dumpall | gzip -9 > /some/partition/all.dbs.out.gz
2 Sichern Sie Ihre Konfigurationsdateien
cp /path/to/postgresql/data_directory/*.conf /some/partition/
3 Beenden Sie Postgresql
pg_ctl -D /path/to/postgresql/data_directory stop
4 Löschen Sie den Inhalt des Datenverzeichnisses
rm -Rf /path/to/postgresql/data_directory/*
5 Führen Sie initdb aus, um Ihr Datenverzeichnis neu zu initialisieren
initdb -D /path/to/postgresql/data_directory
6 Stellen Sie die Konfigurationsdateien wieder her
cp /some/partition/*.conf /path/to/postgresql/data_directory/*.conf
7 Starten Sie Postgresql
pg_ctl -D /path/to/postgresql/data_directory start
8 Stellen Sie den Speicherauszug aller von Ihnen erstellten Datenbanken wieder her
gunzip /some/partition/all.dbs.out.gz
psql -f /some/partition/all.dbs.out
gzip
Teil zu überspringen , um Zeit zu sparen.HINWEIS: Ich habe dies am 9.1 getestet. Ich habe keinen 9.0 Server hier rumliegen. Ich bin mir aber sicher, dass es mit 9.0 funktionieren wird.
VORSICHT (Wie in den Kommentaren von @erny vermerkt):
Sie können dies so gut wie ohne Ausfallzeit tun, indem Sie einen temporären Tablespace verwenden. Die Ausfallzeit erfolgt in Form von exklusiven Sperren. Aber nur auf dem Tisch saugen Sie. Alles, was passiert, ist, dass Client-Abfragen einfach darauf warten, dass die Sperre aktiviert wird wenn sie auf die betreffende Tabelle zugreifen. Sie müssen vorhandene Verbindungen nicht schließen.
Eines ist jedoch zu beachten: Wenn Sie den Tisch bewegen und das Vakuum voll ist, müssen Sie zunächst auf ein exklusives Schloss warten!
Zunächst benötigen Sie offensichtlich zusätzlichen Speicherplatz. Wie
Stéphane
in den Kommentaren erwähnt, muss diese mindestens doppelt so groß wie die betreffende Tabelle sein, wieVACUUM FULL
dies bei einer vollständigen Kopie der Fall ist. Wenn Sie Glück haben und der Maschine dynamisch eine Festplatte hinzufügen können, tun Sie dies. Im schlimmsten Fall können Sie einfach ein USB-Laufwerk anschließen (riskant und langsam)!Hängen Sie als Nächstes das neue Gerät ein und stellen Sie es als Tablespace zur Verfügung:
Sie können die Tablespaces einfach auflisten, indem Sie Folgendes verwenden:
Überprüfen Sie den aktuellen Tablespace Ihrer Tabelle (Sie müssen wissen, wohin Sie ihn zurück verschieben können):
Wenn dies der
NULL
Fall ist , wird der Standardtabellenbereich verwendet:Wenn das auch so ist
NULL
, wird es wahrscheinlich seinpg_default
(überprüfen Sie die offiziellen Dokumente, falls es geändert wird).Bewegen Sie nun den Tisch über:
Staubsaugen:
Verschiebe es zurück:
Entfernen Sie den temporären Speicherplatz:
quelle
size of table x 2
, daVACUUM FULL
eine vollständige Kopie der Tabelle erstellt wird.Schnell und dreckig:
Z.B,:
$ service postgresql stop $ mv /var/lib/postgresql/9.5/main /mnt/bigdisk $ ln -sr /mnt/bigdisk/main /var/lib/postgresql/9.5 $ vacuumdb --all --full $ rm /var/lib/postgresql/9.5/main $ mv /mnt/bigdisk/main /var/lib/postgresql/9.5 $ service postgresql start
quelle
Wenn Sie über den Festplattenspeicher verfügen, um einen Speicherauszug zu erstellen und wiederherzustellen, sollten Sie über den Festplattenspeicher verfügen, um ein Vakuum-DB-FULL durchzuführen. Das Problem ist, dass vacuumdb --full eine Kopie der gesamten Datendatei erstellt. Was Sie also tun könnten, ist:
quelle