ERROR: wrong varnullingrels (b 3) (expected (b)) for Var 2/1

59 views
Skip to first unread message

tomas.emresz

unread,
Oct 1, 2024, 5:25:00 PM10/1/24
to PostgreSQL-cz
Ahoj,
mam relativne jednoduchy dotaz na 3 tabulky se sloupcem jsonb, ktery mou funkci merguju do jednoho (de facto neco jako override dat) a toto ulozi do tabulky. Nyni jsem upgradnul na pg17 a tato funkce selhava s hlaskou %subj%. Vubec netusim oc jde, dotaz obsahuje left lateral join (pro kazda data hleda v dalsich dvou jsonech potencialni pretizeni).
Neda se nejak vypnout ono cosi, co zpusobuje takovou chybovou hlasku?

Prikladam SQL, ale moc asi nerekne a db je docela velka:


select
    f.id,
    e.s_id,
    coalesce(flag,'{}'::jsonb) as flag,
    abies.jsonb_array_to_int_array(flag->'related_ids') as flag_related_ids
from
     abies.flags_json f
     left join lateral
(
select params->'overrides'->f.id::text as ovr from abies.produkty where params->'overrides'->f.id::text is not null
) p on true
left join lateral
(
select s.id as s_id,s.zbozi_parameters->'overrides'->f.id::text as ovr from abies.exports s where s.enabled and s.zbozi_parameters->'overrides'->f.id::text is not null
) e on true
left join lateral
abies.jsonb_recursive_merge(abies.jsonb_recursive_merge(to_jsonb(f.value_json),p.ovr),e.ovr) as flag on true

Prave na recursive_merge joinu to takto selhava, ten sesklada override do jednoho vysledneho (pro predstavu, produkt muze upravovat nejake parametry zbozi, stejne jako export (zde treba cenu apod). Jinak pg17 v dockeru pod unraid,  takze nemam moc moznosti testovat src apod.

Diky
Tom

David Turoň

unread,
Oct 2, 2024, 12:52:47 AM10/2/24
to postgr...@googlegroups.com
Ahoj, tohle urcite nahlas ... stejnou chybu jsme objevili pri testu na prechod z 14 na 16, ale byla vzapeti opravena - tohle bude nejspis jiny usecase.

David

út 1. 10. 2024 v 23:25 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/48de6eff-b6f9-46b0-a67b-5a8e1fc0a2ean%40googlegroups.com.

David Turoň

unread,
Oct 2, 2024, 12:59:08 AM10/2/24
to postgr...@googlegroups.com
Tohle byl nas pripad:

Asi zkus nejak vykostit co se da a udelat nejaky priklad pri kterem to nastave se stejnymi operacemi ... pokud se ti povede a zaslat.

David

st 2. 10. 2024 v 6:52 odesílatel David Turoň <turon...@gmail.com> napsal:

Pavel Stehule

unread,
Oct 2, 2024, 2:39:38 AM10/2/24
to postgr...@googlegroups.com


st 2. 10. 2024 v 6:59 odesílatel David Turoň <turon...@gmail.com> napsal:
Tohle byl nas pripad:

Asi zkus nejak vykostit co se da a udelat nejaky priklad pri kterem to nastave se stejnymi operacemi ... pokud se ti povede a zaslat.

tohle asi bude chyba v planeru, dost mozna se tahle chyba da zreprodukovat i v prazdne db

Pavel

tomas.emresz

unread,
Oct 2, 2024, 7:18:51 AM10/2/24
to PostgreSQL-cz
To jste na mě moc chytrý :) (Ona ta funkce merge zase zavisi na x dalsich funkcich a .. tohle vykostovani uplne neumim teda)
Laboroval jsem nad tím teď dopoledne a ve chvili, kdy onen lateral join s recursive_merge vyhodim ven do dalsiho segmentu with a teprve tam mergnu, tak to jde. Tedy nejprve najit data a pak provest merge. Takze takovej workaround by mohl byt, zkusit vykostit to co zlobi aby to asi bylo vice - jeden segmet with, jedna operace.

Tom

Dne středa 2. října 2024 v 8:39:38 UTC+2 uživatel Pavel Stěhule napsal:

Josef Šimánek

unread,
Jan 8, 2025, 11:10:24 AMJan 8
to PostgreSQL-cz
Taky jsem na to teď narazil. Chybu to hodí jen v 16.6 a 17.2. Na patnáctce vše v pořádku. A taky tam mám LATERAL JOIN. Zkusím to z toho vykostit. Nebo už někdo přišel na to, čím by to mohlo bejt?
Dne středa 2. října 2024 v 13:18:51 UTC+2 uživatel tomas.emresz napsal:

Josef Šimánek

unread,
Jan 8, 2025, 11:25:23 AMJan 8
to postgr...@googlegroups.com
Povedlo se mi to zkrátit na následující dotaz.

BEGIN;
CREATE TEMPORARY TABLE sales_sales (
id bigint,
royalty decimal(10,12),
user_type int,
report_group_id int
) ON COMMIT DROP;
CREATE TEMPORARY TABLE exchange_rates (
account_id bigint,
key varchar(255)
) ON COMMIT DROP;
CREATE TEMPORARY TABLE sales_revenues_for_statement_run_EUR_1 ON
COMMIT DROP AS
SELECT
sales_sales.*
FROM
(
VALUES
(1, ARRAY[0.8, 0.9], 'example_user_type', 1001),
(2, ARRAY[1.0, 0.7], 'another_user_type', 1002)
) AS sales_revenues(sale_id, chain, user_type, statement_id)
LEFT JOIN LATERAL (
SELECT
royalty * sales_revenues.chain[1] AS sales_sales_asset_royalty,
user_type AS sales_sales_user_type
FROM
"sales_sales"
WHERE
(sales_sales.id = sales_revenues.sale_id)
AND "sales_sales"."report_group_id" = 1
) sales_sales ON TRUE
LEFT JOIN exchange_rates exchange_rate ON
exchange_rate.key = concat_ws('-', 'EUR')
WHERE
"exchange_rate"."account_id" = 1;
ROLLBACK;

st 8. 1. 2025 v 17:10 odesílatel Josef Šimánek <josef....@gmail.com> napsal:
> Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/bb85baf1-fc77-4593-af3b-9d4f061c3fb1n%40googlegroups.com.

Pavel Stehule

unread,
Jan 8, 2025, 11:49:37 AMJan 8
to postgr...@googlegroups.com


st 8. 1. 2025 v 17:25 odesílatel Josef Šimánek <josef....@gmail.com> napsal:
prosim, posli reproducer do pghackers

jinak na 18 mi to nespadlo - v masteru je to asi fixnute, ale neni to backportle

na 17.2 ano

Pavel

Josef Šimánek

unread,
Jan 8, 2025, 12:10:14 PMJan 8
to postgr...@googlegroups.com
st 8. 1. 2025 v 17:49 odesílatel Pavel Stehule <pavel....@gmail.com> napsal:
pracuju na tom

> jinak na 18 mi to nespadlo - v masteru je to asi fixnute, ale neni to backportle
>
> na 17.2 ano

zkusím mástr a napíšu tam
> Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/CAFj8pRCd1aaBrG%3DGJL9m8aw_ajMcWrX1WkXazvvQ1AHndtaBFQ%40mail.gmail.com.

Josef Šimánek

unread,
Jan 8, 2025, 3:00:35 PMJan 8
to postgr...@googlegroups.com
st 8. 1. 2025 v 18:09 odesílatel Josef Šimánek <josef....@gmail.com> napsal:
Tak nakonec není potřeba. Větve REL_16_STABLE i REL_17_STABLE to maj
opravený, čili už jen počkat na další vydání.

git bisect mě dovedl sem
(https://github.com/postgres/postgres/commit/85990e2fd5610576635c65db9292297b1730c947,
https://www.postgresql.org/message-id/CACZ67_UA_EVrqiFXJu9XK50baEpH=ofEPJswa2k...@mail.gmail.com)

Pavel Stehule

unread,
Jan 8, 2025, 3:06:13 PMJan 8
to postgr...@googlegroups.com


st 8. 1. 2025 v 21:00 odesílatel Josef Šimánek <josef....@gmail.com> napsal:
diky za info

 
Reply all
Reply to author
Forward
0 new messages