Имя: Пароль:
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 при этом могут выдаваться безвредные сообщения об ошибках, если таких объектов не окажется в целевой базе данных."
Я же говорил, что безвредные сообщения...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.