Очистка места в БД путем временного использования внешнего носителя
При критической нехватке места на диске, когда очистка БД средствами vacuum (как описано в инструкции Первые шаги при возникновении ошибки в БД системы Overseer) работает не корректно или не решает проблему, решением будет временно перенести содержимое БД на другой носитель памяти в сжатом виде с тем, чтобы далее вернуть назад. Для этого потребуется упаковка БД в dump, удаление БД с диска и последующее восстановление.
Далее описаны команды, которые следует выполнить в командной строке Windows для пересоздания БД. В примере используются следующие входные данные:
- база данных для пересоздания имеет название autocode и находится в папке C:\postgres;
- временный каталог находится в папке D:\tmp;
- резервная копия БД будет находится в D:\backup\autocode.backup;
Внимание!
Перед выполнением действий по пересозданию БД следует завершить работу с системой Overseer и выключить работу службы watchdog. Также, во избежание ошибок при пересоздании БД рекомендуется отключить службу обновлений Windows (для этого следует выполнить команду net stop wuauserv & sc config wuauserv start= demand в командной строке Windows).
Команды для пересоздания БД:
set TMPDIR=d:\tmp net stop nncron cd c:\postgres\bin\ psql -h localhost -U postgres -c "select pg_terminate_backend(procpid) from pg_stat_activity where datname='autocode';" pg_terminate_backend() net stop postgresql-9.0 net start postgresql-9.0 pg_dump -F c -b -o --disable-dollar-quoting -U postgres -f d:\backup\autocode.backup autocode dropdb -U postgres autocode clusterdb -U postgres --all createdb -h localhost -U postgres -E UTF8 --lc-collate "Ukrainian, Ukraine" --lc-ctype "Ukrainian, Ukraine" -O autocode autocode pg_restore -d autocode -F c -e -1 -U postgres d:\backup\autocode.backup net start nncron