2017-01-16 79 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