我们使用Postgres / PostGis连接来获取通过geoserver发布的数据。
当前的查询如下所示:
SELECT
row_number() over (ORDER BY a.ogc_fid) AS qid, a.wkb_geometry AS geometry
FROM
(
SELECT * FROM test
UNION ALL
SELECT * FROM test1
UNION ALL
SELECT * FROM test2
)a
在我们的db中,只有有效的shapefiles将被导入到一个表中,因此使UNION部件动态(在每个表上循环并使UNION语句)是有意义的。是否有一种以标准Postgres方式完成此操作的方法,或者我是否需要编写一个函数,语法是什么样的呢?我对SQL非常陌生。
shapefiles具有不同的数据结构,只有ogc_fid列和wkb_geometry列总是可用的,我们希望合并DB中的所有表。
发布于 2016-02-18 16:30:27
这只是一般的指导方针,你需要在细节上工作,特别是合合。
您需要创建一个存储过程
为所需的表名创建一个检查information_schema.tables
过滤器的循环
DECLARE
rec record;
strSQL text;
BEGIN
然后用每个表创建一个strSQL
FOR rec IN SELECT table_schema, table_name
FROM information_schema.tables
LOOP
strSQL := strSQL || 'SELECT ogc_fid, wkb_geometry FROM ' ||
rec.table_schema || '.' || rec.table_name || ' UNION ';
END LOOP;
-- have to remove the last ' UNION ' from strSQL
strSQL := 'SELECT row_number() over (ORDER BY a.ogc_fid) AS qid,
a.wkb_geometry AS geometry FROM (' || strSQL || ')';
EXECUTE strSQL;
https://stackoverflow.com/questions/35486057
复制相似问题