|
|
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
Иногда получаю ошибку 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2016, 17:48 |
|
||
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
У Вас не совпадают типы данных. Приведите явно, используя ::INT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 08:55 |
|
||
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
PCContra, Да уж я понял изначально, что не совпадают, я никак не пойму в каком блин месте они не совпадают ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 13:36 |
|
||
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
Кастаните приведение везде, где тип - int Также, для поиска строчек можно попробовать закомментировать часть из них и методом исключения найти где. Можно добавить или сделать перенос строки и посмотреть, поменяется ли номер строки в описании ошибки. Я всегда так делаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 13:48 |
|
||
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
westvovikPCContra, Да уж я понял изначально, что не совпадают, я никак не пойму в каком блин месте они не совпадают ? Не совпадают они в районе IF (ex_if.orders_id)::bigint IS NOT NULL THEN, но вот почему я пока не могу сообразить. У вас не может быть ситуации что тип у ex_if.orders_id в процессе работы хранимки может меняться? -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 13:48 |
|
||
|
не могу понять место ошибки type of parameter does not match that when preparing the plan
|
|||
|---|---|---|---|
|
#18+
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! Спасибо))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2016, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=94&tid=1997322]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 316ms |

| 0 / 0 |
