Очистка места в БД путем временного использования внешнего носителя

Материал из VIT company
Перейти к навигации Перейти к поиску

При критической нехватке места на диске, когда очистка БД средствами 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