Восстановление базы 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 2642 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 руб. до 200 000 руб.
Полный день

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

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Нижний Новгород
зарплата от 170 000 руб.
Полный день

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