Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6792-й день

Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua

 Не могу восстановить бекап 1С+PostgreSQL

smeegul
Aug 21 2020, 17:48
  
Пост #1



Репутация:   31  
Активист
*

Группа: Пользователи
Сообщений: 298
С нами с: 4-December 06


Всем привет!

На начальном пк стояли 1С, PostgresPro 1C 9.6.8 и pgadmin4, я сдела бекап через pgadmin4, а он не хочет восстанавливаться на другом пк(связка стоит та же - 1С, PostgresPro 1C 9.6.8 и pgadmin4). Как я понимаю нужно было делать бекап не pgadmin4, а из консоли средствами PostgresPro 1C 9.6.8, а я сделал через pgadmin4(в нем встроен PostgreSQL 12 без патчей версии PostgresPro 1C)
При восстановлении базы вылезает много ошибок:

pg_restore: from TOC entry 20356; 1255 22297403 AGGREGATE max(public.mvarchar) postgres
pg_restore: error: could not execute query: ОШИБКА: оператор не существует: public.mvarchar public.> public.mvarchar
Command was: CREATE AGGREGATE public.max(public.mvarchar) (
SFUNC = public.mvarchar_larger,
STYPE = public.mvarchar,
SORTOP = OPERATOR(public.>)
);


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


а после восстановления захожу в нее через конфигуратор и появляется вот такая ошибка:

http://i.piccy.info/i9/0a9fe431a25b8a65243.../1393018/11.jpg


Подскажите, как исправить ошибки?

ЗЫ: доступа к пк на котором делал бекап уже нет
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов(1 - 5)
Morftimg
Aug 21 2020, 18:30
  
Пост #2

Благодарности: 10

Репутация:   754  
0day rescue
****

Группа: Модеры
Сообщений: 4 491
С нами с: 21-April 06


Попробовать переобьявить базу в 1С сервере с другим именем? И указать ту же базу в Postgres.

User is online!Profile CardPM
Go to the top of the page
+Quote Post
smeegul
Aug 22 2020, 10:25
  
Пост #3



Репутация:   31  
Активист
*

Группа: Пользователи
Сообщений: 298
С нами с: 4-December 06


(Morftimg @ Aug 21 2020, 19:30) Перейти к цитате

Попробовать переобьявить базу в 1С сервере с другим именем? И указать ту же базу в Postgres.


Попробовал, та же ошибка(

Сообщение отредактировал smeegul - Aug 22 2020, 10:25
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-13-
Aug 22 2020, 14:49
  
Пост #4

Благодарности: 5715

Репутация:   1254  
Ветеран
*****

Группа: Модеры
Сообщений: 6 284
С нами с: 17-October 06


вы не из Беларуси часом?

гуглится проблема очень похожая на вашу
https://postgresql.men/node/214507

Тут такая штука. Патченый для 1C PostgreSQL содержит в себе библиотеку для поддержки специального типа данных mchar (mvchar, mvachar). Но если вы создаёте БД руками, этот тип данных в БД не прогружается как и его обвязка (CAST'ы и прочее). Поэтому при восстановлении pg_restore выдаёт ошибки - там используется данный тип, а как с ним работать СУБД не знает.

Т.е. чтобы заработало, надо прогрузить либу в БД, создав данный тип и обвязку к нему. Как сделать это вручную, я к сожалению, не знаю. Но вот что я бы сделал. Включил бы в PostgreSQL логгирование запросов к базе, затем бы создал БД из 1C, затем выключил логгирование и посмотрел какие команды при создании БД попали в лог, относящиеся к mchar. Тогда можно было бы создать пустую БД самому и накатить эти команды, после чего всё должно заработать.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
smeegul
Aug 23 2020, 0:31
  
Пост #5



Репутация:   31  
Активист
*

Группа: Пользователи
Сообщений: 298
С нами с: 4-December 06


(-13- @ Aug 22 2020, 15:49) Перейти к цитате

вы не из Беларуси часом?

гуглится проблема очень похожая на вашу
https://postgresql.men/node/214507


Я много гуглил, но пока рабочего решения не нашел. Ваш вариант я видел, он мне не подходит, я не настолько знаю PostgreSQL что бы так делать, мне нужна работающая база.

Пробовал создать пустую базу средствами 1С и в нее залить дамп, многие ошибки и эта - оператор не существует: public.mvarchar - пропали, но все равно в базу нельзя зайти из 1С из конфигуратора, появляется вот эта ошибка:
http://i.piccy.info/i9/82043c9a759021aa7f7...3153/903622.jpg

Сравнивал правильно забекапленный PostgresPro 1C дамп пустой базы и проблемный(перевел все в sql). Отличий много, в основном в данных, где-то 150 таких строк:

2087c2057
< PROCEDURE = public.mchar_icase_gt,
---
> FUNCTION = public.mchar_icase_gt,
2605c2575
< PROCEDURE = public.mv_mc_case_gt,
---
> FUNCTION = public.mv_mc_case_gt,

Я готов заплатить, если не сильно дорого, что бы разбирающийся в PostgreSQL человек помог с этой проблемой.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
smeegul
Aug 24 2020, 12:51
  
Пост #6



Репутация:   31  
Активист
*

Группа: Пользователи
Сообщений: 298
С нами с: 4-December 06


Решил проблему, хорошо что была точно такая же, рабочая, пустая база.
Я преобразовал бекап в sql код, сравнил два бекапа, пустой и проблемный, заменил где-то 150 раз слово FUNCTION
на слово PROCEDURE в проблемном дампе и все заработало.

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

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 19th October 2024 - 9:06
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст.