我在一个公共模式中有一个表,其中包含有关应用程序的所有企业的详细信息,如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;
谢谢,
答案 0 :(得分:1)
您可以创建一个视图,它是这些表的并集并使用它吗? 创建视图myview()为 从schema1.table1中选择.... 联盟 从schema2.table2中选择.... 工会..