При восстановлении базы из бэкапа утилитой 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
$_$;
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);
(5)
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через pgAdmn drop текущей базе, потом cre ate database. И в эту пустую базу восстанавливаю командой:
Кстати, я попробовал отдельно сделать восстановление в туже пустую базу с ключом --clean, и восстанавливает без этих двух ошибок, но дольше. Правда вначале восстановления долго ругается на несуществующие объекты, которые пытается очистить.
Непонятно, почему при восстановлении в пустую базу возникают эти ошибки создания каких-то существующих объектов:
- function "datediff2" already exists with same argument types
- key (filename, partno)=(ibparams.inf, 0) is duplicated.
Как раз восстанавливаю в пустую базу.
Перед восстановлением делаю через pgAdmn drop текущей базе, потом cre ate database. И в эту пустую базу восстанавливаю командой:
Кстати, я попробовал отдельно сделать восстановление в туже пустую базу с ключом --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);
Вообще конечно ситуация странная, новая версия по идее должна быть обратно совместимой со старой версией.