У меня есть таблица в общей схеме, которая содержит подробную информацию о всех предприятиях приложения, как 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;
Спасибо,
Эти схемы не являются фиксированными, если схема добавляется, то мне нужно обновить вид. – user2459396
ОК. Что относительно наличия родительской таблицы в общедоступной и всех других таблицах схемы, наследующей родительскую таблицу? Вы можете запросить родительскую таблицу для получения всех данных? – Jayadevan
К сожалению, мы не можем этого сделать. Нам просто нужно реорганизовать запрос, чтобы избавиться от временного создания таблицы. – user2459396