2017-01-16 49 views
0

我希望能够编写一个SQL查询,通过所有20+模式,而不需要经常更换search_path。我试过UNION ALL,但在大多数情况下,分隔查询可能需要我不费力地编写模式而节省了所有时间。查询本身可以是非常基本的,例如:为多个模式运行相同的SQL查询

SELECT *FROM schm1.table1 

UNION ALL 

SELECT *FROM schm2.table1 

谢谢您的协助!

+0

你用什么db explorer?或者你以后如何保存结果?复制+粘贴?! –

回答

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; 

它可以”保证所有具有相同名称的表具有相同的结构,但是,这就是为什么产生的查询可能失败 - 这是你的责任...

Happy playing

Marco the Sane