我希望编写一个遍历所有20多个模式的SQL查询,而无需不断更换search_path
。我已经尝试了UNION ALL
,但在大多数情况下,分离查询可能会花费我所有的时间,而不是硬编写模式。查询本身可以是非常基本的,例如:
SELECT *FROM schm1.table1
UNION ALL
SELECT *FROM schm2.table1
感谢您的协助!
答案 0 :(得分:0)
“不可能在你等待时完成;请允许两天时间来传递奇迹”。
我担心你想要实现的只能通过SQL生成SQL来完成:
SELECT
CASE ROW_NUMBER() OVER(ORDER BY table_schema)
WHEN 1 THEN ''
ELSE 'UNION ALL '
END
||'SELECT * FROM '
||table_schema
||'.'
||table_name
|| CASE ROW_NUMBER() OVER(ORDER BY table_schema DESC)
WHEN 1 THEN ';'
ELSE CHR(10)
END
FROM tables
WHERE table_name='d_teas_scd'
ORDER BY table_schema
;
我使用d_teas_scd
作为table_name得到的是:
SELECT * FROM flatt.d_teas_scd
UNION ALL SELECT * FROM public.d_teas_scd
UNION ALL SELECT * FROM star.d_teas_scd;
但是,不能保证所有具有相同名称的表具有相同的结构,这就是生成的查询失败的原因 - 这是您的责任......
快乐的玩耍
Marco the Sane