Восстановление базы 1С+PostgresSQL

1. user1363731 20.08.20 21:33 Сейчас в теме
Всем привет!

Делал бекап с работающей базы 1С с помощью pgadmin4, при восстановлении на другом сервере возникли ошибки:
(версии 1С(8.3.15.1565,x64) и PostgresSQL(PostgresPro_1C_9.6.8_64bit_1C) на серверах одинаковые)

pg_restore: error: could not execute query: ОШИБКА: оператор не существует: public.mchar public.> public.mchar
Command was: ALTER OPERATOR public.> (public.mchar, public.mchar) OWNER TO postgres;

pg_restore: error: could not execute query: ОШИБКА: класс операторов "public.mvarchar_case_ops" для метода доступа "btree" не существует
Command was: ALTER OPERATOR CLASS public.mvarchar_case_ops USING btree OWNER TO postgres;

pg_restore: error: could not execute query: ОШИБКА: для типа данных public.mvarchar не определён класс операторов по умолчанию для метода доступа "btree"
HINT: Вы должны указать класс операторов для индекса или определить класс операторов по умолчанию для этого типа данных.
Command was: CREATE UNIQUE INDEX _acc48_7 ON public._acc48 USING btree (_fld887, _parentidrref, _orderfield, _idrref);

pg_restore: error: could not execute query: ОШИБКА: для типа данных public.mvarchar не определён класс операторов по умолчанию для метода доступа "btree"
HINT: Вы должны указать класс операторов для индекса или определить класс операторов по умолчанию для этого типа данных.
Command was: CREATE UNIQUE INDEX _document364_2 ON public._document364 USING btree (_fld887, _number, _idrref);

Пытаюсь войти туда из 1С, выдает ошибку:
Error: operator does not exist: mvarchar = unknown

Если создаю чистую базу из 1С и пытаться восстановить pgadmin-ом бекап в эту базу, то появляются такие ошибки:

pg_restore: error: could not execute query: ОШИБКА: тип "mchar" уже существует
Command was: CREATE TYPE public.mchar;

pg_restore: creating OPERATOR "public.=="
pg_restore: ПРЕДУПРЕЖДЕНИЕ: атрибут оператора "function" не распознан
pg_restore: from TOC entry 21205; 2617 22297493 OPERATOR == postgres
pg_restore: error: could not execute query: ОШИБКА: должна быть указана процедура оператора
Command was: CREATE OPERATOR public.== (
FUNCTION = public.isfulleq_name,
LEFTARG = name,
RIGHTARG = name,
COMMUTATOR = OPERATOR(public.==),
HASHES,
RESTRICT = eqsel,
JOIN = eqjoinsel
);

pg_restore: error: could not execute query: ОШИБКА: приведение типа public.mvarchar к типу public.mchar уже существует
Command was: CREATE CAST (public.mvarchar AS public.mchar) WITH FUNCTION public.mvarchar_mchar(public.mvarchar, integer, boolean) AS IMPLICIT;

pg_restore: creating INDEX "public._usersworkhistory_3"
pg_restore: from TOC entry 31274; 1259 22355837 INDEX _usersworkhistory_3 postgres
pg_restore: error: could not execute query: ОШИБКА: столбец "_fld6380" не существует
Command was: CRE ATE INDEX _usersworkhistory_3 ON public._usersworkhistory USING btree (_fld6380, _fld887, _userid, _date);

Пытаюсь войти туда из 1С, выдает ошибку:
Ошибка при выполнении операций с информационной базой
Запись не найдена в менеджере имен баз данных
Подскажите, как исправить?
Найденные решения
20. user1363731 24.08.20 13:52 Сейчас в теме
Решил проблему, хорошо что была точно такая же, рабочая, пустая база.
Я преобразовал бекап в sql код, сравнил два бекапа, пустой и проблемный, заменил где-то 150 раз слово FUNCTION
на слово PROCEDURE в проблемном дампе и все заработало.

Вот лог сравнения, если интересно:

Скрытый текст
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 2663 20.08.20 23:22 Сейчас в теме
(1)
Подскажите, как исправить?
Так вроде бы данные залились в систему, проблемы возникли только с индексами и приведенными типами.

Не совсем понятно, что Вы имеете ввиду под "Пытаюсь войти туда из 1С, выдает ошибку". Вы добавили базу в консоли?

Лично я бы создал новую базу из 1С (пустую) и загрузил бы туда бэкап тем же методом, которым выгрузил его. Главное, чтобы все данные попали в бэкап. Я для небольших баз приводил скрипты сохранения и развертывания здесь.
3. user1363731 21.08.20 00:07 Сейчас в теме
(2)

>>Не совсем понятно, что Вы имеете ввиду под "Пытаюсь войти туда из 1С, выдает ошибку". Вы добавили базу в консоли?

Запускаю ярлык 1С Предприятие, добавляю базу через кнопку Добавить, после жму или кнопку 1С Предприятие или Конфигуратор и после этого появляется ошибка, т е в базу зайти и работать нельзя.


>>Лично я бы создал новую базу из 1С (пустую) и загрузил бы туда бэкап тем же методом, которым выгрузил его. Главное, чтобы все данные попали в бэкап. Я для небольших баз приводил скрипты сохранения и развертывания здесь.

Первый раз я просто залил бекап через pgadmin в только что созданную мной пустую базу, а второй раз я создал пустую базу из 1С и залил в нее бекап через pgadmin,
но зайти допустим в Конфигуратор нельзя ни в первом случае ни во втором.

1 раз такая ошибка - https://ibb.co/mc1HKyF
2 раз такая - https://ibb.co/bm9BGzs
4. user958326 21.08.20 00:09 Сейчас в теме
(1)
Ели ошибки при восстановлении на другом сервере, то попробуйте восстановить на том, где выгружали
5. user1363731 21.08.20 07:45 Сейчас в теме
(4)

>> Ели ошибки при восстановлении на другом сервере, то попробуйте восстановить на том, где выгружали

К сожалению не могу, это был арендованный сервер, мы от него отказались(
6. user958326 21.08.20 08:41 Сейчас в теме
(5)
Может перед тем как отказываться, надо было проверить работоспособность копии? Есть полная уверенность в отсутствии защиты базы от переноса? Если нет, то арендуйте его еще на сутки, но только проверьте в этот раз
7. user1363731 21.08.20 09:04 Сейчас в теме
(6)

>> Может перед тем как отказываться, надо было проверить работоспособность копии?

Работоспособность основной копии проверил, а этой нет.

>> Есть полная уверенность в отсутствии защиты базы от переноса?

Да, эту базу мне дал 1С программист, там нет защиты.

>> Если нет, то арендуйте его еще на сутки, но только проверьте в этот раз

Перед тем как отдавать сервер я удалил все данные спец программой, без возможности восстановления.
8. user958326 21.08.20 09:21 Сейчас в теме
(7)
"Работоспособность основной копии проверил, а этой нет.", ну как же ж так
"Да, эту базу мне дал 1С программист, там нет защиты." не вижу связи в этих двух выражениях, то что ее дал 1с ник этого не означает
"Перед тем как отдавать сервер я удалил все данные спец программой, без возможности восстановления", а вот это до разворачивания и проверки нового было совсем зря
9. user1363731 21.08.20 10:10 Сейчас в теме
(8)

>> "Да, эту базу мне дал 1С программист, там нет защиты." не вижу связи в этих двух выражениях, то что ее дал 1с ник этого не означает

1С-ник предупредил бы если бы база была с защитой
10. user958326 21.08.20 10:37 Сейчас в теме
(9)
"1С-ник предупредил бы если бы база была с защитой" , если ему это надо то да
11. user958326 21.08.20 10:44 Сейчас в теме
(9)
Я не утверждаю, что защита есть, но если ее нельзя отвергать, то надо было этот факт проверить до отключения от старого сервера
12. user1363731 21.08.20 10:55 Сейчас в теме
(11)

>> Я не утверждаю, что защита есть, но если ее нельзя отвергать, то надо было этот факт проверить до отключения от старого сервера

Спросил, говорит что защиты нет.
13. user958326 21.08.20 10:59 Сейчас в теме
(12)
Значит ищем причину дальше, версии поста и 1с абсолютно те же, что и на старом? Битность серверов та же?
14. user1363731 21.08.20 11:17 Сейчас в теме
(13)

>> Значит ищем причину дальше, версии поста и 1с абсолютно те же, что и на старом? Битность серверов та же?

да
16. user958326 21.08.20 11:21 Сейчас в теме
(14)
Созданы те же пользователи, что и на старом? С теми же паролями?
17. lmnlmn 65 21.08.20 11:25 Сейчас в теме
(1) попробуйте восстановить базу с бэкапа без схемы (ключ -a)
15. user1363731 21.08.20 11:21 Сейчас в теме
вот лог 1С при заходе в Конфигуратор, во вторую базу

14:15.985016-0,CONN,3,process=1cv8,OSThread=2792,Txt=Clnt: MyUserName1: Administrator*SERVER1C
14:15.985018-1,SCALL,3,process=1cv8,OSThread=2792,ClientID=2,Interface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0,CallID=2938,MName=createRemoteInstance,DstClientID=0
14:15.985019-0,CONN,3,process=1cv8,OSThread=2792,Txt=Clnt: DstUserName1: SERVER1C\USR1CV8 StartProtocol: 0 Success
14:15.985021-1,SCALL,3,process=1cv8,OSThread=2792,ClientID=2,Interface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0,CallID=2939,MName=createRemoteInstance,DstClientID=0
14:15.985022-0,CONN,3,process=1cv8,OSThread=2792,Txt=Clnt: MyUserName2: SERVER1C\Administrator
14:16.579001-593978,SCALL,3,process=1cv8,OSThread=2792,ClientID=2,Interface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0,CallID=2940,MName=createRemoteInstance,DstClientID=0
14:16.579003-1,SCALL,3,process=1cv8,OSThread=2792,ClientID=1,CallID=2941,MName=Release,DstClientID=23
14:16.579004-0,CONN,3,process=1cv8,OSThread=2792,Txt='Connection removed from ping direction: address=127.0.0.1:1541,pingTimeout=60000,pingPeriod=12000,lastSentTs=574750625,lastReceivedTs=574750625,lastReceivedTestTs=(574750625),clientID=1'
14:16.579005-0,CONN,3,process=1cv8,OSThread=2792,Txt='Ping direction closed: address=127.0.0.1:1541,pingTimeout=60000,pingPeriod=12000,lastSentTs=574750625,lastReceivedTs=574750625,lastReceivedTestTs=(574750625)'
14:16.579007-610005,CONN,1,process=1cv8,OSThread=2792,ClientID=1,Txt=Outgoing connection closed
14:16.579006-0,CONN,0,process=1cv8,OSThread=2792,Txt='Ping direction statistics: address=127.0.0.1:1541,pingTimeout=60000,pingPeriod=12000,period=610,packetsSent=0,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=0,packetsLostAndFound=0'
14:16.579009-1,SCALL,2,process=1cv8,OSThread=2792,ClientID=2,Interface=ef207edb-9db6-4e8e-ad4b-d20992a2853a,IName=IServerInfoBase,CallID=2942,MName=methodsCount,DstClientID=25
14:21.344000-4764990,SCALL,2,process=1cv8,OSThread=2792,ClientID=2,Interface=ef207edb-9db6-4e8e-ad4b-d20992a2853a,IName=IServerInfoBase,Method=1,CallID=2943,MName=connect,DstClientID=0
14:22.813000-124999,SCALL,2,process=1cv8,OSThread=2792,ClientID=2,CallID=2944,MName=Release,DstClientID=25
14:22.813001-0,CONN,2,process=1cv8,OSThread=2792,Txt='Connection removed from ping direction: address=[::1]:1560,pingTimeout=60000,pingPeriod=12000,lastSentTs=574750641,lastReceivedTs=574750641,lastReceivedTestTs=(574751235,574752266,574753281,574754297,574755328,574756344),clientID=2'
14:22.813002-0,CONN,2,process=1cv8,OSThread=2792,Txt='Ping direction closed: address=[::1]:1560,pingTimeout=60000,pingPeriod=12000,lastSentTs=574750641,lastReceivedTs=574750641,lastReceivedTestTs=(574751235,574752266,574753281,574754297,574755328,574756344)'
14:22.813003-6827992,CONN,2,process=1cv8,OSThread=2792,ClientID=2,Txt=Outgoing connection closed
14:22.813004-0,EXCP,1,process=1cv8,OSThread=2792,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src\ExceptionWriterUIImpl.cpp(215), shown to the user:
a01f465c-ed70-442e-ada5-847668d7a41c: Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных.'
14:27.922002-1,LIC,1,process=1cv8,OSThread=2792,Func=HaspLicense::InternalRelease,res=release,txt='69894000, 20200821111415, local Designer; hard, local, client, 500'
14:27.922003-12828003,PROC,0,process=1cv8,OSThread=2792,Finish=success
18. PiotrLoginov 21.08.20 17:46 Сейчас в теме
насколько я понимаю, в приведенных логах 1С нет информации, которая могла бы что-то прояснить.

версии поста и 1с абсолютно те же, что и на старом?

да


Хороший вопрос и сильный ответ. В слова "версия" здесь может входить уйма разных нюансов сборки PSql.
Думаю, в этой ситуации наложилось то, что на арендуемом серваке (либо у ТС) неудачная сборка PSql, на явно некорректную, с неправильными настройками выгрузку дампа. Как уже говорилось, ни в коем случае нельзя было удалять источник до успешной загрузки в приемник.

Арендуйте сервак еще раз. Убедитесь, что это все тот же сервак с тем же самым ПО. Создайте пустую базу средствами 1С. Включите максимальную детализацию ошибок в СУБД. Попытайтесь залить базу средствами СУБД. Неизбежно повалятся ошибки при создании объектов типа "уже существует". Аккуратно удаляйте из дампа строки, создающие объекты, которые уже есть в созданной силами 1С базе. Вдумчиво разбирайтесь, как обойти ошибки другого типа. В итоге нужно добиться, чтобы база загрузилась в СУБД. Затем включите технологический журнал в 1С и попробуйте зайти в конфигуратор. Дальше по ситуации.

Как изначально заливали свою базу в СУБД на арендуемом серваке? Без проблем? После выполнения предыдущих пунктов можно развернуть рядом базу в состоянии на тот момент и сравнивать структуру для понимания, какие таблицы "полетели".
19. user1363731 22.08.20 11:43 Сейчас в теме
>> Хороший вопрос и сильный ответ. В слова "версия" здесь может входить уйма разных нюансов сборки PSql.
весь софт одинаковых версий

>> Арендуйте сервак еще раз
к сожалению арендовать сервер уже не получится т к он уже был отформатирован и используется под другие задачи
и даже если он не был отформатирован, то я перед тем как его сдать удалил все данные спец программой безвозвратно

скорей всего проблема в том что я делал дамп pgadmin4(в нем встроен PostgreSQL 12 без патчей версии PostgresPro 1C),
нужно было делать дамп из консоли средствами PostgresPro 1C 9.6.8 и проблем бы не было бы, вчера проверил
Кто сможет помочь переконвертировать дамп с формата PostgreSQL 12 в формат PostgresPro 1C, если не очень дорого,
могу заплатить?
20. user1363731 24.08.20 13:52 Сейчас в теме
Решил проблему, хорошо что была точно такая же, рабочая, пустая база.
Я преобразовал бекап в sql код, сравнил два бекапа, пустой и проблемный, заменил где-то 150 раз слово FUNCTION
на слово PROCEDURE в проблемном дампе и все заработало.

Вот лог сравнения, если интересно:

Скрытый текст
21. mousesport 01.09.21 11:45 Сейчас в теме
Оставлю здесь, может кому то поможет...
столкнулся с подобной проблемой при восстановлении базы из дампа - восстановление выпадало в ошибку:
pg_restore: error: could not execute query: ОШИБКА: функция .... с аргументами таких типов уже существует

создание базы средствами 1с и средствами постгреса чистой базы при восстановлении все также приводило к ошибке
пока не наткнулся на выдержку из документации:

The text files created by pg_dump are intended to be read in by the psql program. The general command form to restore a dump is
psql dbname < infile
where infile is what you used as outfile for the pg_dump command. The database dbname will not be created by this command, you must create it yourself from template0 before executing psql (e.g., with createdb -T template0 dbname). psql supports options similar to pg_dump for controlling the database server location and the user name. See psql's reference page for more information.
...
Important: The dumps produced by pg_dump are relative to template0. This means that any languages, procedures, etc. added to template1 will also be dumped by pg_dump. As a result, when restoring, if you are using a customized template1, you must create the empty database from template0, as in the example above.

создал базу средствами постгреса на основании схемы template0 и копия восстановилась без ошибок.
Оставьте свое сообщение
Вакансии
Администратор 1С
Владивосток
зарплата от 150 000 руб.
По совместительству

Руководитель проектов внедрения 1С:УХ
Краснодар
зарплата от 150 000 руб.
Полный день

Программист 1С
Красноярск
зарплата до 230 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 190 000 руб.
Полный день

Аналитик 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день