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

9 views
Skip to first unread message

tomas.emresz

unread,
Jan 24, 2023, 9:54:12 AM1/24/23
to 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

unread,
Jan 24, 2023, 10:34:09 AM1/24/23
to 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

unread,
Jan 24, 2023, 10:39:10 AM1/24/23
to 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

unread,
Jan 24, 2023, 10:50:31 AM1/24/23
to 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
 
Reply all
Reply to author
Forward
0 new messages