我在 PostgreSQL-DB 中有一个架构,其中包含大约。3000 个表,每个表都有一行/条目(大小、id、geom)。我想选择大小值小于 20 的所有表。如何查询多个表而不加入它们?
将所有这些表合并为一个并执行一个简单的 SELECT 查询会更好吗?
如果您在合并所有数据时需要帮助,您可以这样做:
DO $DO$
DECLARE
_tab text;
_r record;
BEGIN
FOR _r IN
-- refine the following query according to your particular needs, if the following doesn't work well
SELECT a.attrelid::regclass::text AS table_name
FROM pg_attribute a
JOIN pg_class c ON (c.oid = a.attrelid)
WHERE a.attrelid IN (SELECT attrelid FROM pg_attribute WHERE attname ILIKE 'geom') AND -- any table with a "geom" column name
c.relnamespace > 11 AND c.relkind = 'r'
GROUP BY a.attrelid
HAVING COUNT(*) = 3 -- only tables with three columns
ORDER BY 1
LOOP
IF _tab IS NULL THEN
_tab := _r.table_name;
EXECUTE 'CREATE TEMP TABLE merged_multi_polygons (tablename text, LIKE '||_tab||');';
END IF;
EXECUTE 'INSERT INTO merged_multi_polygons SELECT '||quote_literal(_r.table_name)||', * FROM '||_r.table_name
-- ||' WHERE size < 20' -- UNCOMMENT THIS LINE TO PRODUCE THE TABLE ONLY FOR SMALL-SIZED ENTRIES
|| ' LIMIT 1';
END LOOP;
END;
$DO$;
SELECT * FROM merged_multi_polygons WHERE size < 20;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
113 次 |
最近记录: |