Problem: Datenbanktabelle hat Schwierigkeiten bei VACUUM (Postgres 8.3)
Auswirkung: Tabelle und Indezies wachsen, Abfragen werden langsamer, da ständig Autovacuum läuft.
Lösung: Dump und restore der DB-Tabelle (hier wurde ganze DB gedumpt).
Um zu vermeiden, dass während des Dump/Restores die DB belastet wird, sollten auch wiederkehrende Scripte auf dem Server (crontab) bedacht werden, die auf die Tabelle/DB zugreifen.
Danach muss verhindert werden, dass von aussen auf die DB zugegriffen wird, während DUMP/RESTORE stattfindet.
vim /etc/postgresql/8.3/main/postgresql.conf
Die Zeile mit „listen_address = ‚*'“ auskommentieren (mit Raute #)
Postgres muss restartet werden, damit Einstellung greift.
/etc/init.d/postgresql-8.3 restart
Datenbank dumpen:
su - postgres
pg_dump -c meine_db | gzip > /tmp/meine_db.sql.gz
Vorsichtshalber wird die bestehende DB umbenannt, damit sie im Falle eines Problems wieder verwendet werden kann.
psql
ALTER DATABASE meine_db RENAME TO meine_db_backup;
Neue Datenbank anlegen:
CREATE DATABASE meine_db;
Dump zurückspielen:
zcat /tmp/meine_db.sql.gz | psql meine_db
Postgres wieder nach aussen öffnen:
vim /etc/postgresql/8.3/main/postgresql.conf
und Kommentar vor der listen_address Zeile entfernen.
Postgres restarten:
/etc/init.d/postgresql-8.3 restart
Testen, ob die Aktion erfolgreich war, danach kann die kopierte/umbannante Datenbank meine_db_backup gelöscht werden.