Portál AbcLinuxu, 23. prosince 2025 13:42
Řešení dotazu:
1) aby výsledná tabulka nebyla příliš velká. Tabulek je kolem stovky, každá má něco kolem milionu záznamů. Obecně ty tabulky nepotřebuji spojovat, a nejsou spolu nijak provázány
2) Když ty tabulky updatuje paralelně několik klientů (8 konexi, každá updatuje jednu "malou" tabulku) tak nemusím řešit zamykání a podobné věci a mohu to dělat paralelně.
postgres=# do $$ -- iterace pres public a tabulky obsahujici sloupecek "c"
declare
_table_name text;
_m int; _aux int; -- zde pouzit odpovidajici datovy typ
begin
for _table_name in
select table_name
from information_schema.columns
where column_name = 'c' and table_schema = 'public'
loop
execute format('select max(%I) from %I.%I', 'c', 'public', _table_name) into _aux;
_m := greatest(_m, _aux);
end loop;
raise notice 'maximum je %', _m;
end; $$;
NOTICE: maximum je 100
DO
( SELECT min(c) AS c1 FROM t1 ) UNION ( SELECT min(c) AS c1 FROM t2 )Vypsat nejmenší minimum:
SELECT min(c1) FROM ( ( SELECT min(c) AS c1 FROM t1 ) UNION ( SELECT min(c) AS c1 FROM t2 ) ) a;Důležité je nezapomenout pojmenovat odvozenou tabulku, v příkladu jsem pojmenoval jako "a". Pokud názvy tabulek předem neznáte, tak asi jedině pomocí SQL, které se předem vygenerujete. Pomocí procedury uložené v databázi anebo v programovacím jazyce, ze kterého sql dotaz spouštíte.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.