2013-11-18 4 views
0

У меня есть таблица в общей схеме, которая содержит подробную информацию о всех предприятиях приложения, как id, name, logo, web_site_address, schema_name и т.д. Тогда есть схемы для каждого обмена таких же структуру данных предприятия. Теперь есть требование найти некоторую информацию для всех предприятий. Я написал следующий запрос в функции для этого. Тем не менее, я считаю, что должен быть лучший способ сделать это, не используя CREATE TEMP TABLE.
Любая помощь по рефакторингу будет оценена по достоинству.Объедините аналогичные данные из нескольких схем

CREATE TEMPORARY TABLE IF NOT EXISTS temp_vehicles(plateno character varying, vehiclesurrogate_id bigint, devicesurrogate_id bigint, startdate timestamp with time zone, enddate timestamp with time zone); 
    EXECUTE 'TRUNCATE TABLE temp_vehicles'; 

FOR r IN SELECT * FROM platformdb.entreprise_details LOOP 
    EXECUTE 'SET SEARCH_PATH TO ' || r.schema_name || ', public'; 
    EXECUTE 'INSERT INTO temp_vehicles SELECT v.plateno, v.vehiclesurrogate_id, vda.devicesurrogate_id, vda.startdate, vda.enddate 
           FROM ' || r.schema_name || '.object_access_vehicle() v 
           INNER JOIN ' || r.schema_name || '.vehicledeviceassignment vda on vda.vehiclesurrogate_id = v.vehiclesurrogate_id AND overlap(startdate, enddate, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) 
           INNER JOIN platformdb.lt_enterprise_device lted ON lted.device_surrogate_id = vda.devicesurrogate_id AND overlap(lted.startdate, lted.enddate, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) AND enterprise_surrogate_id = ' || r.entreprise_surrogate_id; 
END LOOP; 

Спасибо,

ответ

1

Вы можете создать представление, которое является объединением этих таблиц и использовать это? Создать вид MyView(), как выбрать ... от schema1.table1 союза выбрать ... от schema2.table2 союза ..

+0

Эти схемы не являются фиксированными, если схема добавляется, то мне нужно обновить вид. – user2459396

+0

ОК. Что относительно наличия родительской таблицы в общедоступной и всех других таблицах схемы, наследующей родительскую таблицу? Вы можете запросить родительскую таблицу для получения всех данных? – Jayadevan

+0

К сожалению, мы не можем этого сделать. Нам просто нужно реорганизовать запрос, чтобы избавиться от временного создания таблицы. – user2459396

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