Postgres 中的动态 UNION ALL 查询

2024-07-03

我们使用 Postgres / PostGis 连接来获取通过地理服务器发布的数据。

查询现在看起来像这样:

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

在我们的数据库中,只有有效的 shapefile 才会导入到单个表中,因此使 UNION ALL 部分动态化(循环每个表并生成 UNION ALL 语句)是有意义的。有没有办法以标准的 Postgres 方式做到这一点,或者我是否需要编写一个函数以及语法是什么样的?我对 SQL 还很陌生。

shapefile 具有不同的数据结构,只有 ogc_fid 列和 wkb_geometry 列始终可用,我们希望合并数据库中的所有表。


这只是一般准则,您需要处理细节,特别是语法。

您需要创建一个存储过程

创建循环检查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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 中的动态 UNION ALL 查询 的相关文章

  • 用户定义函数性能缺点

    我有一个包含大量 UDF 的数据库 其中包含一个长时间运行的进程 涉及大量数据操作和计算 我使用 UDF 的想法是将信息的逻辑单元从底层表中分离出来 例如 如果我想获取有关汽车的信息 我可能有几个表 例如颜色 型号 年份等 每次获取汽车时我
  • 如何插入只有一个 IDENTITY 列的表?

    在尝试回答的过程中提出了这个问题另一个 https stackoverflow com questions 850017 how to manage groups in the database 850049 850049 考虑下面的 MS
  • 更改 SQL Server 中的列

    什么是正确的语法ALTER语句向现有列添加默认值 我可以毫无错误地添加新列 ALTER TABLE tb TableName ADD Record Status varchar 20 但是如果我尝试使用以下语句更改现有列以应用默认值 ALT
  • 上下文 sp_OAMethod“发送”中的 msxml3.dll

    Win2003 SQL Server 2005 中的工作代码在 Win2012 SQL Server 2012 sp1 下无法工作 唯一 真实solution https social msdn microsoft com 443 Foru
  • 使用sql删除重复行

    我正在尝试从 mysql 表中删除重复的行 我尝试了多个查询 但不断收到此错误 1093 You can t指定目标表 usa city 以在 FROM 子句中进行更新 该表如下所示 usa city id pk id state city
  • 我可以在商业应用程序中使用免费的 SQL Server Express [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 SQL 查询的所有结果存储在多维数组中?

    大家好 我想将我的数组转换为其他数组类型 请帮助我 我 我用这个 row mysql fetch array result MYSQL ASSOC 输出是 Array user id gt 250 name gt a age gt sfsf
  • 在单个查询中进行分组、排序和计数

    我试图GROUP SORT and COUNT在单个查询中 我的表之一名为 商品 这是我的简化MySql table family sub family name detailed name Agro Grains Wheat Wheat
  • 我如何记住 CONNECT BY 查询中 PRIOR 应该走哪条路

    我的记忆力很糟糕 每当我在 Oracle 中执行 CONNECT BY 查询时 我的意思是every时间 我必须认真思考 通常通过反复试验来确定 PRIOR 应该采用哪个论证 我不知道为什么我不记得了 但我不记得了 有没有人有一个方便的记忆
  • 是否有一个表保存 sysobjects.xtype 描述的列表?

    根据sysobjects 文档 https msdn microsoft com en us library ms177596 aspx sysobjects xtype可以是以下对象类型之一 xtype Description AF Ag
  • jqGrid - 未应用日期和时间格式

    我有一个显示 3 列的 jqGrid 其中一列是日期时间 正在返回的 SQL 日期时间字段 colModel 设置如下 colModel name col1 sortable false name col2 sortable false n
  • 复合主键:好还是坏?

    虽然可以使用复合主键 但是对于下面的情况 这真的是一种不好的做法吗 Stackoverflow 上的共识在这个问题上似乎是双向的 Why 我想将订单付款存储在单独的表中 原因是 一个订单可以有许多项目 这些项目以多对多关系的形式在单独的表中
  • 连接到 Postgres Docker 服务器 - 身份验证失败

    我设置了一个 PostgreSQL 容器 可以使用 Adminer 成功连接到该容器 但在尝试使用相同凭据通过 DBeaver 等方式进行连接时 出现身份验证错误 我尝试在 Dockerfile 中公开端口 5432 并且可以在 Windo
  • 如何清除实体框架中的待定更改

    我有一些表数据DbContext我不想保存 我已经删除了数据库 重新设置了它 但是挂起的更改不会消失DbContext 重建数据库后 我的数据库表为空 但是当我将实体作为对象列表调用时 它仍然包含旧对象 关于如何清除旧的待处理数据有什么建议
  • PostgreSQL 8.2 -- 如何获取任何数组的字符串表示形式?

    In PostgreSQL8 2 什么是inversePostgreSQL 的文本到数组转换 据我们所知 select a b c text as x 0 1 2 3 int as y x y a b c 0 1 2 3 有没有预定义的函数
  • 可与 Microsoft Access 中的“CREATE TABLE”一起使用的字段类型

    我对为 Microsoft Access 生成表创建脚本感到不满 我还没有找到任何描述各种类型的语法的文档 我有找到了文档 http msdn microsoft com en us library bb177893 aspx对于 Acce
  • 如何计算 django 连接表中对象的数量?

    我的问题很简单 我有Users谁拥有Assets or Assets属于用户的如果您愿意 但我无法检索其数量 计数 Assets each User有 我知道这对你们大多数人来说可能听起来很愚蠢 但我是 python django 来自 P
  • mysql 从每个组中选择 2 行

    我有 2 个具有这种结构的表 Products id title 1 sample 1 2 sample 2 3 sample 3 4 sample 4 5 sample 5 6 sample 6 gallery id typeid nam
  • 如何打印导致ORA-01843错误的记录?

    我有一个包含数百万条记录的表 我正在尝试将一列数据格式化为DATE格式 目前处于VARCHAR2 但是 我越来越ORA 01843不是有效的月份错误 我正在尝试获取导致 ORA 01843 的那些记录 CREATE OR REPLACE P
  • PostgreSQL 使用“lag()”窗口函数更新查询

    我有一个涉及Postgresql数据库的任务 我对 SQL 不太有经验 我有一张贸易产品每周营业额的表格 每周提供以下信息 产品 周数 周营业额 可能是正值或负值 具体取决于天气 更多产品被购买或出售 我添加了一栏 其中包含每周的期末余额

随机推荐