powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не могу понять место ошибки type of parameter does not match that when preparing the plan
6 сообщений из 6, страница 1 из 1
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39202408
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иногда получаю ошибку

ERROR: type of parameter 14 (integer) does not match that when preparing the plan (bigint)

CONTEXT: PL/pgSQL function notifications(character varying,character varying,text,text) line 20 at IF

STATEMENT: SELECT notifications('packs_visa_tourist_status', 'UPDATE', '"visa_to"=>NULL, "bio_date"=>NULL, "visa_days"=>NULL, "visa_from"=>NULL, "visa_type"=>NULL, "to_last_dt"=>NULL, "client_last_dt"=>NULL, "status_visa_id"=>"3", "packs_tourist_id"=>"152322"', '"visa_to"=>NULL, "bio_date"=>NULL, "visa_days"=>NULL, "visa_from"=>NULL, "visa_type"=>NULL, "to_last_dt"=>NULL, "client_last_dt"=>NULL, "status_visa_id"=>"13", "packs_tourist_id"=>"152322"')


Вот сама ф-ция, где в ней 20 линия, откуда вообще считать строки, от тела ?

CREATE OR REPLACE FUNCTION public.notifications
(
IN tbl varchar,
IN "action" varchar,
IN hs text,
IN hs_old text
)
RETURNS integer AS
$$
DECLARE
return_r record;
notif_if record;
notif record;
ex_if record;
ord_client record;
BEGIN

FOR notif_if IN SELECT nf.* FROM notifications_conditions nf JOIN notifications n ON n.id = nf.notifications_id WHERE nf.TABLE = $1 AND nf.ACTION = $2 LOOP
-- RAISE NOTICE 'notice hstore: = %', (hs)::text;

IF notif_if.query_hs IS NOT NULL THEN
IF ($4)::hstore IS NULL THEN
EXECUTE notif_if.query_hs INTO ex_if USING ($3)::hstore;
ELSE
EXECUTE notif_if.query_hs INTO ex_if USING ($3)::hstore, ($4)::hstore;
END IF;

IF (ex_if.orders_id)::bigint IS NOT NULL THEN
SELECT ord.orders_id, ord.client_id INTO ord_client FROM orders ord JOIN clients c ON c.clients_id = ord.client_id AND c.email IS NOT NULL AND c.phone IS NOT NULL WHERE ord.orders_id = (ex_if.orders_id)::bigint;

IF ord_client.orders_id IS NOT NULL THEN
-- RAISE NOTICE 'notifications_send';
INSERT INTO public.notifications_send(notifications_id, orders_id, clients_id, dop_fields)
VALUES (notif_if.notifications_id, ord_client.orders_id, ord_client.client_id, ex_if.dop_fields);

END IF;
END IF;
END IF;
END LOOP;

RETURN 1;
END
$$
LANGUAGE 'plpgsql'
SECURITY DEFINER;
...
Рейтинг: 0 / 0
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39202715
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Вас не совпадают типы данных.

Приведите явно, используя ::INT
...
Рейтинг: 0 / 0
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39203160
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PCContra,

Да уж я понял изначально, что не совпадают, я никак не пойму в каком блин месте они не совпадают ?
...
Рейтинг: 0 / 0
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39203178
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кастаните приведение везде, где тип - int

Также, для поиска строчек можно попробовать закомментировать часть из них и методом исключения найти где. Можно добавить или сделать перенос строки и посмотреть, поменяется ли номер строки в описании ошибки. Я всегда так делаю
...
Рейтинг: 0 / 0
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39203179
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
westvovikPCContra,

Да уж я понял изначально, что не совпадают, я никак не пойму в каком блин месте они не совпадают ?

Не совпадают они в районе IF (ex_if.orders_id)::bigint IS NOT NULL THEN, но вот почему я пока не могу сообразить.
У вас не может быть ситуации что тип у ex_if.orders_id в процессе работы хранимки может меняться?

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
не могу понять место ошибки type of parameter does not match that when preparing the plan
    #39203352
westvovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

У меня в таблице notifications_conditions содержаться запросы,
конкретно в этом случае выполняется

SELECT row_to_json(ob.*) as dop_fields, ot.orders_id FROM packs_visa_tourist_status p JOIN packs_tourist pt ON pt.id = p.packs_tourist_id JOIN orders_tourist ot ON ot.id = pt.orders_tourist_id JOIN (SELECT ob.id, split_part((ob.name)::text, '~|~'::text, 1) AS name FROM objects ob WHERE ob.type='Клиент') ob ON ob.id = ot.clients_id WHERE p.packs_tourist_id = (($1)->'packs_tourist_id')::integer AND p.status_visa_id = 3 AND (($2)->'status_visa_id')::integer <> 3

ex_if это результат выполнения этого запроса,

Точно обнаружил что ot.orders_id - integer, а должен быть bigint! Спасибо)))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не могу понять место ошибки type of parameter does not match that when preparing the plan
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]