Восстановление базы из бекапа PostgreSQL
Доброго времени суток!
Ситуация такая, есть сервер 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;$$;
Как восстановить данные бекапы, или они потерянные и проблема при создании?
Ситуация такая, есть сервер 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;$$;
Как восстановить данные бекапы, или они потерянные и проблема при создании?
По теме из базы знаний
- Крэш базы со счастливым концом v8.1
- Установка PostgreSQL 9.0.1 + 1С 8.2 Server + 1C 8.2 (клиент под wine 1.2).
- Потоковая репликация и непрерывное архивирование базы данных PostgreSQL - делюсь небольшим опытом
- Установка 1С Сервера взаимодействия на Linux
- Восстановление базы из DT, если она не хочет восстанавливаться
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Делал уже по разному и 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
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
(3)
Создавать базу 1с нужно средствами 1с, а не pgAdmin и т.д.
Т.е. если база клиент-серверная, тогда базу нужно создавать на кластере 1с.
При установке posgresql под 1С нужно инициализировать базу сразу с русской локалью,
достаточно команды — initdb —locale=ru_RU.UTF-8
Тогда всё получится при восстановлении такой базы из командной стоки.
Создавать базу 1с нужно средствами 1с, а не pgAdmin и т.д.
Т.е. если база клиент-серверная, тогда базу нужно создавать на кластере 1с.
При установке posgresql под 1С нужно инициализировать базу сразу с русской локалью,
достаточно команды — initdb —locale=ru_RU.UTF-8
Тогда всё получится при восстановлении такой базы из командной стоки.
Создаю новую базу через консоль сервера 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:
по причине:
Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных."
Есть какие то идеи?
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:
по причине:
Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных."
Есть какие то идеи?
Ситуация немного прояснилась, есть два сервера, первый - основной и второй тестовый, бекап сделанный на основном сервере, не поднимался ни на каком сервере. Но если со второго сервера делать бекам через сеть баз расположенных на первом сервере, то бекапы поднимаются. Дистрибутив один и тот же, правда на первом WinServer 2016 на втором 2012. Проблема с ранее сделанными бекапами осталась, за новыми буду наблюдать. Бекапы теперь делаются батником по расписанию на втором сервере, БД с первого сервера. Как то вот так.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот