合并来自多个模式的类似数据

时间:2013-11-18 12:31:37

标签: sql postgresql postgresql-9.1

我在一个公共模式中有一个表,其中包含有关应用程序的所有企业的详细信息,如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 个答案:

答案 0 :(得分:1)

您可以创建一个视图,它是这些表的并集并使用它吗? 创建视图myview()为 从schema1.table1中选择.... 联盟 从schema2.table2中选择.... 工会..