Резервное копирование PG

Средствами ПК "Бюджет-СМАРТ" (см меню "Управление базами") создаются логические файлы резервных копий (текстовые файлы, содержат набор команд, выполнение которых восстанавливает содержимое базы данных).

Резервные копии баз данных бывают логические и физические.

- <span style="color:purple">**Логический бэкап**</span> (текстовый) - файл бэкапа содержит команды, выполнение которых приводит к восстановлению содержимого базы. Представляет из себя текстовый файл. Команда PG для создания таких бэкапов: **pg\_dump**, **pg\_dumpAll** . Недостатки: долгое время восстановления (террабайтная база несколько часов).  Восстановление таких резервных копий через команду pg\_restore .

- <span style="color:purple">**Физический бэкап**</span> - файл бэкапа представляет из себя архив, который содержит непосредственно сами файлы базы данных, которые объединены и заархивированы в одном файле. Команда PG для создания таких бэкапов: **pg\_basebackup** . Восстановление таких резервных копий делается через файл конфига восстановления с перезапуском (остановкой) СУБД.

Создание резервной копии

perform xp_pg_dump (v_DbName := '${dbname}', v_Path := '${backupdir}/${backupfilename}');


(PostGre развернут в ОС Linux)

do $bcp$
declare v_Result integer; v_ErrorMsg text; v_backup_info text; v_File text; v_TagName text; v_BackPath text; v_days text;
begin
-- Параметры скрипта -------------------------------------------
v_TagName='budjet_22'; --Имя резервируемой базы данных PostgreSQL
v_BackPath='/var/lib/pgsqlks-13.1_5434/backups/'; --Имя каталога, куда будет резервироваться база данных
v_days=14; --Количество дней, в течение которых будет храниться резервная копия базы данных
-------------------------------------------------------------------------

select p.v\_Result, p.v\_ErrorMsg, p.v\_backup\_info, p.v\_File
into v\_Result, v\_ErrorMsg, v\_backup\_info, v\_File
from xp\_pg\_dump ( v\_DbName := v\_TagName ,v\_Path := v\_BackPath||v\_TagName||'/daily' ,v\_File := '@dbname\_id\_@timestamp\_id.bak' ) p;

perform xp\_cmdshell\_1('find '||v\_BackPath||v\_TagName||'/daily/ -maxdepth 1 -mount -mtime +'||v\_days||' -name "'||v\_TagName||'\_\*" 
-execdir echo -e $(date +"%d.%m.%Y %H:%M:%S") <span style="background-color:green">"Планируем удалить в текущем каталоге старые файлы: 
{}."</span> \\; -delete -execdir echo -e $(date +"%d.%m.%Y %H:%M:%S") <span style="background-color:green">"Файл удален: {}.\\n"</span> \\; | tee -a '||v\_BackPath||v\_TagName||'/daily/log.txt', 0);

end;
$bcp$
;