Резервное копирование базы данных postgres

Автор Dimas, 22 июля 2024, 12:33:58

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Dimas

Добрый день, уважаемые форумчане!
Необходимо сделать резервную копию базы данных 1С, созданной на Postgres psql. Создание dump файла происходит успешно, ошибок нет. Создаю его следующей командой:
pg_dump -U user25 -d base -h 127.0.0.1 -p 5432 -Fc -b | gzip > /backup/base.$(date +%Y.%m.%d-%H.%M.%S).dump.gz
После командой gzip -d -k /backup/base.2024.07.22-11.54.05.dump.gz разархивирую файл.
В созданную пустую базу данных переношу ранее созданную резервную копию командой:
sudo -u postgres pg_restore --clean -U user25 -W -h 127.0.0.1 -p 5432 -d base < /backup/base.2024.07.22-11.54.05.dump
Получаю следующую ошибку в огромном количестве:
pg_restore: error: could not execute query: ERROR: relation "public.v8users" does not exist.
Как побороть данную ошибку?

ogost

Сейчас я не на компе, неудобно гуглить, но ошибка о том, что при восстановлении из бэкапа не хватает foreign key (не помню название по-русски) public.vBusers. Похоже на неправильно созданный дамп, или неправильную команду восстановления, завтра на работе гляну точнее

Dimas

Цитата: ogost от 22 июля 2024, 22:24:33Сейчас я не на компе, неудобно гуглить, но ошибка о том, что при восстановлении из бэкапа не хватает foreign key (не помню название по-русски) public.vBusers. Похоже на неправильно созданный дамп, или неправильную команду восстановления, завтра на работе гляну точнее
Cпасибо, буду ждать. Сегодня пробовал ещё раз создавать dump файл. При восстановлении ругается на множество public. Точнее, такая ошибка: ERROR: relation "public.xxxxxx" does not exist

Dimas

Цитата: ogost от 22 июля 2024, 22:24:33завтра на работе гляну точнее
ogost, удалось на работе глянуть?

ogost

Посмотрите в дампе где у вас public прописано.

Dimas

Как посмотреть где прописан public в dump файле?


Dimas

Посмотрел и выгрузил результат команды в текстовый файл.
Привожу две случайные строки из файла:
7434; 1259 4215713 TABLE public _accumrg41021 postgres
7448; 1259 4215794 TABLE public _accumrg41045 postgres

При необходимости могу прикрепить текстовый файл.

ogost

#8
Убедитесь, что таблица public.v8users есть в списке и вообще в продакшн базе. Если есть, то добавьте флаг -L, чтобы указать порядок восстановления объектов.
pg_restore -l /backup/base.2024.07.22-11.54.05.dump > /backup/restore.list
postgres pg_restore --clean --no-owner -L /backup/restore.list -U user25 -W -h 127.0.0.1 -p 5432 -d base /backup/base.2024.07.22-11.54.05.dump


26 июля 2024, 11:45:51
Кто имеет опыт работы с 1С наверняка вам сразу скажет где собака зарыта. Возможно там ссылка на отдельную базу, которая не попала в дамп или что-то в таком роде.

Dimas

#9
Цитата: ogost от 26 июля 2024, 11:42:32Убедитесь, что таблица public.v8users есть в списке
Самостоятельно убедиться не смогу, так как с 1C не работаю совсем.
Попробовал вышеприведённые команды:
Первая успешно создала файл "restore.list"
Вторая выдала следующую ошибку:
Command 'postgres' not found, did you mean:
   command 'postgrey' from deb postgrey (1.36-5.2)
Try: sudo apt install <deb-name>

26 июля 2024, 12:05:35
Если запустить просто pg_restore без postgres, то при восстановлении появляются многочисленные ошибки типа:
pg_restore: из записи оглавления 113521; 1259 4260899 INDEX _inforg32991_4 postgres
pg_restore: ошибка: could not execute query: ОШИБКА:  индекс "_inforg32991_4" не существует
Выполнялась команда: DROP INDEX public._inforg32991_4;
pg_restore: из записи оглавления 113520; 1259 4260896 INDEX _inforg32991_3 postgres
pg_restore: ошибка: could not execute query: ОШИБКА:  индекс "_inforg32991_3" не существует
Выполнялась команда: DROP INDEX public._inforg32991_3;
И так далее...

ogost

Цитата: Dimas от 26 июля 2024, 12:02:00Вторая выдала следующую ошибку:
Command 'postgres' not found, did you mean:
  command 'postgrey' from deb postgrey (1.36-5.2)
упс, там в начале должно быть sudo -u в начале, неправильно скопировал. Должно быть так:
sudo -u postgres pg_restore --clean --no-owner -L /backup/restore.list -U user25 -W -h 127.0.0.1 -p 5432 -d base /backup/base.2024.07.22-11.54.05.dump
Цитата: Dimas от 26 июля 2024, 12:02:00Самостоятельно убедиться не смогу, так как с 1C не работаю совсем.
нужно просто войти в постгрес при помощи DBveaver или другой прогой и проверить, в 1С заходить не надо

Dimas

#11
Цитата: ogost от 26 июля 2024, 12:13:02в начале должно быть sudo -u
Команда сработала, но ошибки остались теми же.

Dimas

Сегодня попробовал восстановить базу из dump файла на другом ПК (на нём установлены 1С и Postgres с компонентами 1С). Восстановление прошло без единой ошибки.
Кто знает, почему на компьютере без 1С не восстанавливается база данных?

dzhoser

Вероятно не хватает каких то компонентов из 1С
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

Dimas

Цитата: dzhoser от 29 июля 2024, 14:42:19Вероятно не хватает каких то компонентов из 1С
Как это можно понять на этапе восстановления, чтоб сразу продолжить на машине с 1С?