Portál AbcLinuxu, 13. května 2025 01:00
Ř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.