2017-01-16 3 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; 

Это может» t гарантировать, что все таблицы с тем же именем имеют одинаковую структуру, однако, поэтому результирующий запрос может потерпеть неудачу - это ваша ответственность ...

Happy playing

Marco the Sane

 Смежные вопросы

  • Нет связанных вопросов^_^