Šablona textu

16 views
Skip to first unread message

tomas.emresz

unread,
Feb 8, 2023, 6:46:38 AM2/8/23
to PostgreSQL-cz
Zdarec,
lámu si nad tím hlavu už nějakou dobu, ale nic me nenapadá. Systém generování kombinací zboží mi už - skutečně velmi krásně - funguje, umí hafo věcí (rozdělení dle úrovní, vyčlenění jistých variant, výpočty ceny varianty, override hodnot (při třeba exportu na různé servery se přehlasuje třeba úroveň rozdělení produktů).
Nyní jsem ale narazil na generování kódu zboží. Jde o to, seskládat text dle šablony. Format umí jen číselné pořadí parametrů, což není ono. Reálně nejde jen o kódy, ale i o doplnění velikostní tabulky apod, nicméně, stále se motáme kolem čehosi jako
var1) {main_code}/{color_code}-{size_code} 
či lépěji 
var2) {main.code}/{color.code}-{size.code}
apod.
Pro prvotní situaci to teď nahrazuji rekurzivním replace dle dodaných parametrů v jsonb, ale jednak je to jen pro var1, druhak s přibývajícím počtem textů to bude náročné. Napadlo mě to ještě rozdělit nějakým svým splitem na tabulku
var                                 txt
main.code
                                         /
color.code
                                          -
size.code

a tu project a nahradit, čímž bych dost omezil počet průchodů a umožnil (asi, přes jsonb path) hierarchický přístup k datům (rád bych to použil například i do popisku zboží, kde se výsledný popisek sestává z odkazů na popisky jednotlivých příznaků (příznak pro modrou barvu například obsahuje - tentokráte v modré barvě, která je úplně suprzelená) apod. Tedy popisek by mohl mít posléze formát stylu  bla bla bla {type_description}, {color_desription}<br /><br /> {size_table}.

Nejaky nakopnuti? (Vim, že na jednu stranu bych rád po pg víc, ale pokud by to šlo tak pěkně, jako generátor kombinací, budu nadšen..)

Tom


Tomas Vondra

unread,
Feb 8, 2023, 6:57:04 AM2/8/23
to postgr...@googlegroups.com, tomas.emresz


On 2/8/23 12:46, tomas.emresz wrote:
>
> ...
>
> Nejaky nakopnuti? (Vim, že na jednu stranu bych rád po pg víc, ale pokud
> by to šlo tak pěkně, jako generátor kombinací, budu nadšen..)
>

Nevím jestli jsem úplně přesně pochopil záměr, ale pokud jde čistě o
flexibilnější generování toho kódu tak bych si zkusil napsat plpython
funkci která bude mít jako vstup formát a jsonb s key/value pro náhradu.

Něco jako:

CREATE FUNCTION format_code(p_format text, p_keys jsonb) RETURNS text
LANGUAGE plpython3u
TRANSFORM FOR TYPE jsonb
AS $$
RETURN (p_format % p_keys)
$$;



T.

tomas.emresz

unread,
Feb 8, 2023, 7:04:32 AM2/8/23
to PostgreSQL-cz
De facto takovy "stupid" template pro texty. Najdi {(?<key>[^}]*)}, nahrad dle key/value. plpython jsem zatim nikdy nepouzil, vzdy jsem vystacil s plpgsql ci sql primo. Jak to je s rychlosti, obecne kompatibilitou (aby upgrade pg (nebo apt update) nezrusil takovy funkcnosti)) ? U tech popisku apod uz si to muzu udelat v aplikaci, ale u toho kodu by se to siklo primo v pg, takze proc to nemit rovnou oboje v pg.
T.

Dne středa 8. února 2023 v 12:57:04 UTC+1 uživatel Tomáš Vondra napsal:

Tomas Vondra

unread,
Feb 8, 2023, 7:24:25 AM2/8/23
to postgr...@googlegroups.com, tomas.emresz
Nedokážu si představit že bychom tuhle funkčnost (resp. plplython) nějak
"odebrali", toho bych se nebál. A vzhledem k tomu jak moc se dává důraz
na zpětnou kompatibilitu bych se nebál ani nějaké breaking change mezi
major verzemi ...

Výkon jsem nezkoumal, ale zase nenamlouvejme si že nějaké custom řešení
přes smyčky v plpgsql bude zadarmo. Pokud je nutné maximalizovat
rychlost tak bych to zkusil přegenerovávat jen při modifikaci - buď přes
trigger nebo přes generated columns.

T.
> --
> 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
> <mailto:postgresql-c...@googlegroups.com>.
> Chcete-li tuto diskusi zobrazit na webu, navštivte
> https://groups.google.com/d/msgid/postgresql-cz/abd4b397-4dff-4aea-9e2e-fea1aff31bf3n%40googlegroups.com <https://groups.google.com/d/msgid/postgresql-cz/abd4b397-4dff-4aea-9e2e-fea1aff31bf3n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Pavel Stehule

unread,
Feb 8, 2023, 7:54:38 AM2/8/23
to postgr...@googlegroups.com


st 8. 2. 2023 v 13:04 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
De facto takovy "stupid" template pro texty. Najdi {(?<key>[^}]*)}, nahrad dle key/value. plpython jsem zatim nikdy nepouzil, vzdy jsem vystacil s plpgsql ci sql primo. Jak to je s rychlosti, obecne kompatibilitou (aby upgrade pg (nebo apt update) nezrusil takovy funkcnosti)) ? U tech popisku apod uz si to muzu udelat v aplikaci, ale u toho kodu by se to siklo primo v pg, takze proc to nemit rovnou oboje v pg.

kompatibilita je bezproblemova (predpokladam, ze Python 4 jeste dalsich 10 let nebude), rychlostne je to rychlejsi nez plpgsql - resp. plpgsql ma rychlejsi start, python pak vlastni beh.

Na tyhle dynamicke veci nebo praci s retezci to muze byt o dost lepsi nez plpgsql.

 
T.

Dne středa 8. února 2023 v 12:57:04 UTC+1 uživatel Tomáš Vondra napsal:


On 2/8/23 12:46, tomas.emresz wrote:
>
> ...
>
> Nejaky nakopnuti? (Vim, že na jednu stranu bych rád po pg víc, ale pokud
> by to šlo tak pěkně, jako generátor kombinací, budu nadšen..)
>

Nevím jestli jsem úplně přesně pochopil záměr, ale pokud jde čistě o
flexibilnější generování toho kódu tak bych si zkusil napsat plpython
funkci která bude mít jako vstup formát a jsonb s key/value pro náhradu.

Něco jako:

CREATE FUNCTION format_code(p_format text, p_keys jsonb) RETURNS text
LANGUAGE plpython3u
TRANSFORM FOR TYPE jsonb
AS $$
RETURN (p_format % p_keys)
$$;



T.

--
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/abd4b397-4dff-4aea-9e2e-fea1aff31bf3n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages