Ошибка при восстановлении 1C базы PostgreSQL

1. MaximR 09.04.21 18:14 Сейчас в теме
Здравствуйте.

При восстановлении базы из бэкапа утилитой pg_restore выдает два предупреждения (ранее такого не было). Ниже.
База восстанавливается, и работает.
Как это можно исправить, и насколько это критичные ошибки?

Ранее было обновление платформа 8.3 и PostgreSQL12.5.

**************************************** 1 *************************************************************
pg_restore: creating FUNCTION "public.datediff(character varying, timestamp without time zone, timestamp without time zone)"
pg_restore: creating FUNCTION "public.datediff2(character varying, timestamp without time zone, timestamp without time zone)"
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 12752; 1255 16404 FUNCTION datediff2(character varying, timestamp without time zone, timestamp without time zone) postgres
pg_restore: error: could not execute query: ERROR: function "datediff2" already exists with same argument types
Command was: CRE ATE FUNCTION public.datediff2(character varying, timestamp without time zone, timestamp without time zone) RETURNS integer
LANGUAGE plpgsql
AS $_$
DECLARE
arg_mode alias for $1;
arg_d2 alias for $2;
arg_d1 alias for $3;
BEGIN
if arg_mode = 'SECOND' then
return date_part('epoch',arg_d1) - date_part('epoch',arg_d2) ;
elsif arg_mode = 'MINUTE' then
return trunc((date_part('epoch',arg_d1) - date_part('epoch',arg_d2)) / 60);
elsif arg_mode = 'HOUR' then
return trunc((date_part('epoch',arg_d1) - date_part('epoch',arg_d2)) /3600);
elsif arg_mode = 'DAY' then
return cast(arg_d1 as date) - cast(arg_d2 as date);
elsif arg_mode = 'WEEK' then
return trunc( ( cast(arg_d1 as date) - cast(arg_d2 as date) ) / 7.0);
elsif arg_mode = 'MONTH' then
return 12 * (date_part('year',arg_d1) - date_part('year',arg_d2))
+ date_part('month',arg_d1) - date_part('month',arg_d2);
elsif arg_mode = 'QUARTER' then
return 4 * (date_part('year',arg_d1) - date_part('year',arg_d2))
+ date_part('quarter',arg_d1) - date_part('quarter',arg_d2);
elsif arg_mode = 'YEAR' then
return (date_part('year',arg_d1) - date_part('year',arg_d2));
end if;
END
$_$;

**************************************** 2 *************************************************************

pg_restore: creating CONSTRAINT "public.params params_pkey"
pg_restore: from TOC entry 147599; 2606 44951 CONSTRAINT params params_pkey postgres
pg_restore: error: could not execute query: ERROR: could not create unique index "params_pkey"
DETAIL: Key (filename, partno)=(ibparams.inf, 0) is duplicated.
Command was: ALT ER TABLE ONLY public.params
ADD CONSTRAINT params_pkey PRIMARY KEY (filename, partno);

********************************************************************************************************

pg_restore: warning: errors ignored on restore: 2
End
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. XAKEP 09.04.21 20:24 Сейчас в теме
а что искали и не нашли ответа ?
+
4. MaximR 09.04.21 22:58 Сейчас в теме
(3)
Спасибо, но:

https://forum.infostart.ru/forum16/topic234974/
не мой случай, т.к. база переносилась на новые релизы postgresql и 1С через выгрузку dt в старых версиях.

https://stackoverflow.com/questions/51114997/pg-restore-warning-errors-ignored-on-restore-62
https://postgrespro.ru/list/thread-id/2123112
не решает проблемы :-(
+
5. ab_initio 95 10.04.21 05:50 Сейчас в теме
Пробуйте в пустую базу восстановить.
+
6. MaximR 10.04.21 22:44 Сейчас в теме
(5)
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через pgAdmn drop текущей базе, потом cre ate database. И в эту пустую базу восстанавливаю командой:

"C:\Program Files\PostgreSQL\12.5-6.1C\bin\pg_restore.exe" --host "localhost" --port "5432" --username "XXX" --dbname "XXX" --no-password --role "postgres" --no-password --section pre-data --section data --section post-data --verbose "XXX"

Кстати, я попробовал отдельно сделать восстановление в туже пустую базу с ключом --clean, и восстанавливает без этих двух ошибок, но дольше. Правда вначале восстановления долго ругается на несуществующие объекты, которые пытается очистить.

Непонятно, почему при восстановлении в пустую базу возникают эти ошибки создания каких-то существующих объектов:
- function "datediff2" already exists with same argument types
- key (filename, partno)=(ibparams.inf, 0) is duplicated.
+
7. uZer716242 19.05.21 13:09 Сейчас в теме
(6)
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через pgAdmn drop текущей базе, потом cre ate database. И в эту пустую базу восстанавливаю командой:

"C:\Program Files\PostgreSQL\12.5-6.1C\bin\pg_restore.exe" --host "localhost" --port "5432" --username "XXX" --dbname "XXX" --no-password --role "postgres" --no-password --section pre-data --section data --section post-data --verbose "XXX"

Кстати, я попробовал отдельно сделать восстановление в туже пустую базу с ключом --clean, и восстанавливает без этих двух ошибок, но дольше. Правда вначале восстановления долго ругается на несуществующие объекты, которые пытается очистить.

Непонятно, почему при восстановлении в пустую базу возникают эти ошибки создания каких-то существующих объектов:
- function "datediff2" already exists with same argument types
- key (filename, partno)=(ibparams.inf, 0) is duplicated.


Та же самая ситуация, восстановление с 11.5 на 13.2

pg_restore: из записи оглавления 63950; 2606 71019376 CONSTRAINT params params_pkey postgres
pg_restore: ошибка: could not execute query: ОШИБКА:  создать уникальный индекс "params_pkey" не удалось
ПОДРОБНОСТИ:  Ключ (filename, partno)=(ibparams.inf, 0) дублируется.
Выполнялась команда: ALT ER   TABLE ONLY public.params
    ADD CONSTRAINT params_pkey PRIMARY KEY (filename, partno);


Вообще конечно ситуация странная, новая версия по идее должна быть обратно совместимой со старой версией.
+
8. MaximR 19.05.21 13:25 Сейчас в теме
postgree свежий вызывает много вопросов в части работы и производительности... надо переходить на MSSQL.
+
Внимание! Тема сдана в архив

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