array_to_string a nullif v generovanem sloupci (aneb, kde sezeneme definici internich funkci)

9 visningar
Hoppa till det första olästa meddelandet

tomas.emresz

oläst,
24 jan. 2023 09:54:122023-01-24
till PostgreSQL-cz
Zdarec,
narazil jsem opet na takovou zapeklitou cosi a sice, jak generovat sloupec jako spojeni dalsich sloupcu.

    main_nazev varchar not null generated always as (array_to_string(array[nullif(preffix,''),nullif(nazev,''),nullif(suffix,'')], ' ')) stored,


Na jednu stranu chapu, ze funkce zde pouzite musi byt "pasivni", ale proc neni array_to_string ci nullif immutable? A kde bych vubec prisel k jejich definici (googlil jsem postgresql nullif definition apod ale k nicemu poradnemu jsem se nedopatral). Jasne, main_nazev mohu pri updatech nastavit rucne, ale je to prace navic, trigger je taky zbytecny, takze se mi takoveto generovani (ci treba vytazeni nejcastejsich polozek z jsonb) docela libi. No a treti dotaz je samozrejme, jak zaridit, aby se takovyto radek postgresu libil?

Diky

Tom

Pavel Stehule

oläst,
24 jan. 2023 10:34:092023-01-24
till postgr...@googlegroups.com
Ahoj

út 24. 1. 2023 v 15:54 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:


protoze dochazi k serializaci do textu, a parametrem muze byt pole libovolneho datoveho typu vcetne napriklad date nebo timestamp with time zone, a u nich transformace do textu zalezi na konfiguraci.

Pokud bys tam mel jen cisla nebo texty, tak si muzes udelat svuj vlastni wrapper

create or replace function text_array_to_string(text[], text)
returns text as $$ select array_to_string($1, $2) $$ immutable language sql;

Pokud by se dala pouzit funkce concat, tak by to bylo jednodussi, ale ta je stable, a funkce s typem "any" se nedaji zawrapovat

jinak jak zjistit definici:

v psql \df+ array_to_string nebo \sf

nullif je pseudofunkce - tam definici nenajdes (stejne jako u coalesce, least, greatest). Je to jeste z dob, kdy Postgres neumel variadicke funkce, a funkce s promennym poctem parametru se zadratovaly primo do SQL engine - tj. parser primo rozpozna nullif nebo coalesce (a nebere je jako generickou funkci), a tyto pseudofunkce se specificky optimalizuji a i specificky vykonavaji - maji primo podporu v executoru. Poznas je podle toho, ze je nenajdes v pg_proc. Dneska by se asi dalo zit bez pseudofunkci (mozna), ale nikomu to nestalo za to, aby to prepsal.

Pavel


 

Diky

Tom

--
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/c9b28bd7-af98-4967-9369-8ecc6d244c6cn%40googlegroups.com.

tomas.emresz

oläst,
24 jan. 2023 10:39:102023-01-24
till PostgreSQL-cz
aaa, to s temi datumy me nenapadlo, sem si rikal, pro stejna data stejny vysledek, ale formatovani me nenapadlo.
Diky

Dne úterý 24. ledna 2023 v 16:34:09 UTC+1 uživatel Pavel Stěhule napsal:

Pavel Stehule

oläst,
24 jan. 2023 10:50:312023-01-24
till postgr...@googlegroups.com


út 24. 1. 2023 v 16:39 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
aaa, to s temi datumy me nenapadlo, sem si rikal, pro stejna data stejny vysledek, ale formatovani me nenapadlo.

ja to taky musel googlovat - ono to neni na prvni pohled videt - ale dava to smysl

Pavel
 
Svara alla
Svara författaren
Vidarebefordra
0 nya meddelanden