Ahoj.
V posledni dobe si hodne hraju s TimescaleDB. Definice CAGG (Continuous Aggregate) je hodne omezena tim, ze nedovoluje pouzivat konstrukce jako CTE, subquery, window funkce a non-immutable funkce.
BTW: TimescaleDB od verze 2.20 (kveten 2025) ma experimentalni podporu pro window a non-immutable funkce. Jeste jsem to nezkousel. Takze mozna vyse uvedeny problem brzo spadne do kategorie "jen pro uspokojeni zvedavosti".
Bohuzel s temito omezenimi nejde spousty veci jednoduse dosahnout primo v CAGG (je nutne delat triggery na zdrojovych tabulkach, ktere dopocitavaji a ukladaji pomocna data pro pouziti v CAGG).
Napadlo mne, ze bych mohl "oblafnout" Postgres tim, ze funkci nadeklaruji jako IMMUTABLE, prestoze ve skutecnosti cte data z tabulek (napr. CAGG, ktery pocita ceny za energii a musi se podivat do tabulek s cennikem).
A funguje to... Jen nevim, za jakych presne okolnosti fungovat prestane.
Nemam rad takove hacky, ale momentalne by mi tato finta hodne pomohla.
Z dokumentace Postgresu:
There is relatively little difference between STABLE and IMMUTABLE categories when considering simple interactive queries that are planned and immediately executed: it doesn't matter a lot whether a function is executed once during planning or once during query execution startup. But there is a big difference if the plan is saved and reused later. Labeling a function IMMUTABLE when it really isn't might allow it to be prematurely folded to a constant during planning, resulting in a stale value being re-used during subsequent uses of the plan. This is a hazard when using prepared statements or when using function languages that cache plans (such as PL/pgSQL).
Z toho mi vychazi:
Nevadi to, pokud jsou dotazy provadene kazdy v ramci nove session (noveho pripojeni). Plan cache je podle mne per session (???).
Nevadi to, pokud je funkce SQL?
Diky
Michal Bartak
Nevadi to, pokud je funkce SQL?
--
Diky
Michal Bartak
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.
Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/CAAVzF_FREJHRHWUC3%3D7gnRNC%3DEx-BYQV0isrid_gxMBBRX-sag%40mail.gmail.com.
Tonda H.
--
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.
Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/45452.1757006105%40localhost.
Tonda H.
--
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.
Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/postgresql-cz/3338.1757049239%40localhost.