Имя: Пароль:
1C
 
Постгрес, резервное копирование.
0 YaFedor
 
27.03.25
15:11
Выполняю резервное копирование при помощи pg_dump, при этом, при восстановлении ругается. Хотя база как-то восстанавливается и открывается при этом в режиме предприятие.

Прочитал вот здесь: http://www.gilev.ru/pg_dump/
Пишут, что pg_dump не лучшая идея, лучше pg_dumpall.

Хорошо, сделал резервную копию всего экземпляра сервера Postgres.
А как из него восстановить конкретную базу?
1 Garykom
 
гуру
27.03.25
15:25
2 YaFedor
 
27.03.25
15:34
(2) Там нет ответа на этот вопрос
3 vbus
 
27.03.25
15:43
Неправильный вариант, восстановить все базы, всего экземпляра и pg_dump -ом перенести нужную куда нужно. Правильный вариант один инстанс- одна база, восстановил и все. Я пользуюсь dump -ом, но у меня все маленькое.
4 YaFedor
 
27.03.25
15:46
(3) "Неправильный вариант, восстановить все базы, всего экземпляра"

Т.е. в некий новый экземпляр востанавливаем весь экземпляр из резервной копии, а потом оттуда pg_dump опять архивируем нужную базу, после чего pg_dunp восстанавливаем базу уже из этого архива в рабочий экземпляр?
5 Daniilvb
 
27.03.25
15:49
Попробуйте восстановить в новую(созданную базу) или с опцией "Clean before restore". Пользуюсь pg_dump в таком сценарии без проблем.
6 Garykom
 
гуру
27.03.25
15:52
(0) >при этом, при восстановлении ругается

надеюсь восстанавливаешь в чистую пустую (или новую) базу
а не в уже существующую?
если база уже с данными - сначала надо ее очистить
или лучше удалить и создать заново
7 YaFedor
 
27.03.25
15:54
(6) Да, в чистую.
8 YaFedor
 
27.03.25
15:55
(5) Та же фигня
9 ansh15
 
27.03.25
23:29
>>при восстановлении ругается
Что пишет? Может, это и не ошибки вовсе, а просто "безвредные сообщения", подлежащие игнорированию.
10 YaFedor
 
28.03.25
15:13
(9) Ошибки типа таких:

pg_restore: error: could not execute query: ERROR: index "_reference98_2" does not exist
Command was: DROP INDEX public._reference98_2;


pg_restore: error: could not execute query: ERROR: table "_inforgchngr2311" does not exist
Command was: DROP TABLE public._inforgchngr2311;

pg_restore: error: could not execute query: ERROR: table "_inforgchngr2274" does not exist
Command was: DROP TABLE public._inforgchngr2274;
11 Чеширский
 
28.03.25
15:57
Бекап делали в момент реструктуризации базы?
12 YaFedor
 
28.03.25
15:59
(11) нет, во время обычной работы
13 bolder
 
28.03.25
16:07
(0) Как же хорошо доверить все это адммину).
Ps. MS SQL сам могу,очень удобная штука,жаль что они нас так кинули.PG только скриптом бэкап написал на сохранение,есть заготовка в интернете.Админ грозится что владееет магией восстановления)
14 YaFedor
 
28.03.25
16:06
(13) Ага, смотрю постгрес и понимаю как было хорошо, когда было хорошее ПО :-)
15 Garykom
 
гуру
28.03.25
16:46
(11) бэкап PgSQL в момент реструктуризации это тушите свет
я так однажды базу прода запорол
повезло что бэкап оказался рабочий, хотя реструктуризация упала и запорола базу
16 Garykom
 
гуру
28.03.25
16:48
(14) PgSQL хорошее ПО
но не очень юзер-френдли ибо опенсорсное бесплатное
17 Чеширский
 
28.03.25
19:34
Тогда мне не понятно, зачем при восстановлении бекапа удалять индексы и таблицы
18 Garykom
 
гуру
28.03.25
19:48
(17) потому что этот вот "бэкап" (логический) - фактически текст, последовательность sql команд для воссоздания базы
включите туда в самое начало команды очистки базы (удаления всех индексов, таблиц и прочего) если надо
19 Garykom
 
гуру
28.03.25
19:48
(18)+ в статье в (1) все описано
если надо можно делать физический (бинарный) бэкап вместо логического (текстового)
но это требует остановки службы PgSQL

у MSSQL предусмотрена частичная остановка или точнее восстановление из физического бэкапа одной базы на лету
в PgSQL нет

но кто/что вам мешает для каждой отдельной базы поднимать отдельный экземпляр службы PgSQL?
понятно на разных портах
20 ansh15
 
28.03.25
20:27
(10) Для чистой базы --clean не нужен, там нечего удалять.
Из инструкции(pg_restore):
"--clean
Прежде чем восстанавливать объекты базы данных, выполните команды DROP для всех восстанавливаемых объектов. Этот параметр полезен для перезаписи существующей базы данных. Без дополнительного указания --if-exists при этом могут выдаваться безвредные сообщения об ошибках, если таких объектов не окажется в целевой базе данных."
Я же говорил, что безвредные сообщения...
21 YaFedor
 
15.04.25
14:32
Продолжаем.
Сделал резервную копию кластера через pg_dumpall.

Восстанавливаю:
postgres-# psql -X -f "C:\_BackUp\AllServer\allBackUp.sql"

никаких сообщений не выдает. Как узнать работает ли вообще это?
22 Anchorite
 
16.04.25
05:40
(21)  => Как узнать работает ли вообще это?

Потестить хорошенько? Типа например несколько раз сделать такой бэкап во время пиковой нагрузки на проде или вообще во время реструктуризации для совсем уж полной уверенности, лол.
23 DrZombi
 
гуру
16.04.25
06:02
(0) При восстановлении из консоли PostgreSQL, было замечено, что самое лучшее восстановление, это
1. Иметь бэкап. готовый
2. удалить базу в PostgreSQL.
3. Создать базу с тем же именем в PostgreSQL.
4. Восстанавливаем, без каких либо лишних галочек, типо той же "Clean before restore"... Нечего не трогаем, все по умолчанию :)
...
И вуаля, восстановление проходит без какой либо ошибки.
А в других вариантах, стоит тронуть какую либо галочку при восстановлении, сыпется куча сообщений, или бэкап вовсе не восстанавливается :)
24 YaFedor
 
16.04.25
09:49
(22) Как потестить?

Скопировал кластер.
Удалил несколько баз.
Восстанавлиаю кластер обратно.

Запустил эту команду - psql не выдает никаких сообщений, захожу через PGAdmin - не вижу, чтобы базы, существующие в архиве появились в кластере - значит не работает, а может просто еще работает и не закончилось ...
25 YaFedor
 
16.04.25
09:51
(23) так и делаю, но восстановление говорит, что закончилось неуспешно, ошибки из (10).

При этом база создается, из 1с запускается
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.