Здравствуйте.
При восстановлении базы из бэкапа утилитой 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
При восстановлении базы из бэкапа утилитой 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
По теме из базы знаний
- PostgreSQL для 1С 8.3: ускоряем резервное копирование и восстановление для отдельной базы очень большого размера
- Свойства объектов 1С в MS SQL (и сравнение баз и расширений)
- Ошибка загрузки большого архива 1Cv8.dt в PostgresSQL на платформе 1С 8.3.19
- Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика
- Калькулятор железа для 1C
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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.
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через 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.
(6)
Та же самая ситуация, восстановление с 11.5 на 13.2
Вообще конечно ситуация странная, новая версия по идее должна быть обратно совместимой со старой версией.
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через 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.
Перед восстановлением делаю через 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);
Вообще конечно ситуация странная, новая версия по идее должна быть обратно совместимой со старой версией.
postgree свежий вызывает много вопросов в части работы и производительности... надо переходить на MSSQL.
Ошибка связана с тем, что кластер 1с поддерживает соединение с базой.
Для её избежания, перед восстановлением базы, временно, на кластере 1с очищаем имя базы.
Желательно подождать секунд 10, для того что бы 1с завершила обмен данными, если он есть.
Только после этого проводить восстановление базы.
После восстановления не забудьте вернуть имя базы в кластере 1с.
Для её избежания, перед восстановлением базы, временно, на кластере 1с очищаем имя базы.
Желательно подождать секунд 10, для того что бы 1с завершила обмен данными, если он есть.
Только после этого проводить восстановление базы.
После восстановления не забудьте вернуть имя базы в кластере 1с.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот