Восстановление базы из бекапа PostgreSQL

1. Sergus 01.11.18 10:56 Сейчас в теме
Доброго времени суток!
Ситуация такая, есть сервер PostgreSQL 10.3-2.1C, делаются на нем бекапы батником, строкой вида

"C:\Program Files\PostgreSQL\10.3-2.1C\bin\pg_dump.exe" --format=c -n public --host=localhost --port=5432 --file="d:\bkp1c\forest_%DATETIME%.bek" 2>"d:\bkp1c\base_name.log" --username=postgres base_name
бекапы создаются без ошибок, файлы с ошибками пустые.

При восстановлении в базу созданную через pgAdmin вылетает с ошибкой:
pg_restore: creating OPERATOR FAMILY "public.xid_fill_ops"
pg_restore: creating TABLE "public._acc34"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 6578; 1259 6642834 TABLE _acc34 postgres
pg_restore: [archiver (db)] could not execute query: ERROR: type "public.mvarchar" does not exist

В базу созданную через сервер 1С с ключом очистки:
pg_restore: connecting to database for restore
pg_restore: dropping INDEX byusosname
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 34189; 1259 133093 INDEX byusosname postgres
pg_restore: [archiver (db)] could not execute query: ERROR: index "byusosname" does not exist
Command was: DR OP INDEX public.byusosname;

В базу созданную через сервер 1С без очистки
pg_restore: connecting to database for restore
pg_restore: creating SCHEMA "public"
pg_restore: creating COMMENT "SCHEMA public"
pg_restore: creating FUNCTION "public.binrowver(integer)"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 6707; 1255 44862 FUNCTION binrowver(integer) postgres
pg_restore: [archiver (db)] could not execute query: ERROR: function "binrowver" already exists with same argument types
Command was: CRE ATE FUNCTION public.binrowver(p1 integer) RETURNS bytea
LANGUAGE plpgsql
AS $$
DECLARE
bytearea BYTEA;
BEGIN
bytearea := SET_BYTE('\\000\\000\\000\\000\\000\\000\\000\\000'::bytea, 4, MOD(P1 / 16777216, 256));
bytearea := SET_BYTE(bytearea, 5, MOD(P1 / 65536, 256));
bytearea := SET_BYTE(bytearea, 6, MOD(P1 / 256, 256));
bytearea := SET_BYTE(bytearea, 7, MOD(P1, 256));
RETURN bytearea;
END;$$;

Как восстановить данные бекапы, или они потерянные и проблема при создании?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 78 01.11.18 12:02 Сейчас в теме
Вы делайте бэкап в командной строке,
так и восстанавливайте тоже из командной строки, ссылка.
3. Sergus 01.11.18 12:16 Сейчас в теме
Делал уже по разному и pgAdminои и из командной строки, результат такой же :-(
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 6578; 1259 6642834 TABLE _acc34 postgres
pg_restore: [archiver (db)] could not execute query: ERROR: type "public.mvarchar" does not exist
4. Timur.V 78 01.11.18 12:47 Сейчас в теме
(3)
Создавать базу 1с нужно средствами 1с, а не pgAdmin и т.д.
Т.е. если база клиент-серверная, тогда базу нужно создавать на кластере 1с.
При установке posgresql под 1С нужно инициализировать базу сразу с русской локалью,
достаточно команды — initdb —locale=ru_RU.UTF-8

Тогда всё получится при восстановлении такой базы из командной стоки.
5. Sergus 01.11.18 18:16 Сейчас в теме
(4) Так я же и писал что пробовал и средствами 1С создавать(в консоле сервера), локализацию сейчас проверю, но вроде как должна быть русской.
6. Sergus 01.11.18 20:10 Сейчас в теме
Создаю новую базу через консоль сервера 1С, восстанавливаю в нее бекап PostgreSQL, и получаю в конце ошибку восстановления (код ошибки 1) в логе сообщается что WARNING: errors ignored on restore: 134, в начале ругается на то что объекты уже есть:
pg_restore: [archiver (db)] Error from TOC entry 366; 1259 133214 TABLE _accopt postgres
pg_restore: [archiver (db)] could not execute query: ERROR: relation "_accopt" already exists
но в конце несколько записей иного типа:
pg_restore: creating INDEX "public._systemsettin_bykey"
pg_restore: [archiver (db)] Error from TOC entry 36547; 1259 220235 INDEX _systemsettin_bykey postgres
pg_restore: [archiver (db)] could not execute query: ERROR: column "_fld1015" does not exist
и при запуске 1С выдает ошибку
"Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:
по причине:
Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных."
Есть какие то идеи?
7. Sergus 02.11.18 02:14 Сейчас в теме
Ситуация немного прояснилась, есть два сервера, первый - основной и второй тестовый, бекап сделанный на основном сервере, не поднимался ни на каком сервере. Но если со второго сервера делать бекам через сеть баз расположенных на первом сервере, то бекапы поднимаются. Дистрибутив один и тот же, правда на первом WinServer 2016 на втором 2012. Проблема с ранее сделанными бекапами осталась, за новыми буду наблюдать. Бекапы теперь делаются батником по расписанию на втором сервере, БД с первого сервера. Как то вот так.
8. Timur.V 78 02.11.18 10:30 Сейчас в теме
(7)
Дистрибутив один и тот же, правда на первом WinServer 2016 на втором 2012.

На двух серверах могут отличаться настройки PostgeSQL.
ссылка1
ссылка2
9. Sergus 02.11.18 16:30 Сейчас в теме
(8)Изначально настройки серверов были одинаковые, это уже позже я стал экспериментировать.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот