Відповіді:
Ви можете побачити приблизний прогрес за допомогою списку TOC.
Спочатку отримайте список об'єктів, що підлягають відновленню:
pg_restore -l -f list.toc db.dump
Потім ви можете побачити рядок списку TOC і порівняти висновок багатослівного або запиту pg_stat_activity, щоб побачити, де в списку TOC знаходиться pg_restore.
Це лише приблизна оцінка. По-перше, тому що кожен елемент зі списку TOC може зайняти дійсно різний час для завантаження (наприклад, схеми швидкі, але завантаження даних великих таблиць та індексів побудови не є), і якщо ви використовуєте -j, вам буде відновлено елемент до того, як закінчився попередній. Крім того, я не впевнений на 100%, якщо pg_restore точно слідує за списком TOC, якщо ви не використовуєте -L, але я думаю, що це так.
Дійсно для середовищ Unix / Linux:
Утиліта Pipe Viewer (pv) може бути використана для відстеження прогресу резервного копіювання. Pv оживляє вашу оболонку з деталями про минулий час та перенесені байти.
Нижче наводиться приклад скидання за допомогою утилітів pv та split для збереження великих дамп-файлів невеликими шматками. Можливо, буде зручно перенести його пізніше в інше місце.
# dump the PREDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=pre-data -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".PREDATA.sql"
# dump the POSTDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=post-data -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".POSTDATA.sql"
# dump the DATA into the .DATA.dump compressed (binary) file
pg_dump -Fc --section=data -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".DATA.dump"
Недолік - такий підхід не працює, якщо використовується опція pg_dump -Fd (дамп у папку).