java - 如何批量对两个postgreSQL 大表进行外连接?

标签 java postgresql batch-processing outer-join

我有两个包含数百万行的表。他们共享一个共同的电子邮件地址。他们不共享任何其他字段。

我有一个工作正常的连接操作。

select r.*,l.* from righttable r full outer join lefttable l on r.email=l.email 

但是,结果集包含数百万行,这使我的服务器内存不堪重负。我如何运行连续查询,一次只从每个表中提取有限数量的行,并最终访问两个表中的所有行?

此外,在收到结果集后,我们的服务器可能会对一个或两个表进行一些插入。恐怕这可能会使跟踪每个连续查询中的偏移量变得复杂。也许这不是问题。我无法理解它。

最佳答案

我认为您不能分批执行此操作,因为它不会知道要在没有看到所有数据的情况下制作哪些行来满足“FULL OUTER”。如果您知道在您工作时没有人对表进行更改,您可以通过在单独的查询中选择仅左元组、仅右元组和内部元组来解决这个问题。

但是,它不应该消耗服务器上的所有内存(假设您指的是 RAM,而不是磁盘空间),因为它应该使用临时文件而不是 RAM 来满足所需的大部分存储(尽管内存存在一些问题)用于大型散列连接,因此您可以尝试 set enable_hashjoin=off)。

客户端可能会使用太多内存,因为它可能会尝试一次将整个结果集读入客户端 RAM。有很多方法可以解决这个问题,但它们可能不涉及操纵 JOIN 本身。您可以使用游标从单个结果流中批量读取,或者您可以使用\copy 将结果假脱机到磁盘,然后我们在上面使用类似 GNU split 的东西。

关于java - 如何批量对两个postgreSQL 大表进行外连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62421450/

相关文章:

java - 返回字符数而不是单词数中的单词数

java - Spring不加载静态内容

Java 正则表达式匹配器问题

postgresql - 是否可以查看从 pgAdmin 导入作业生成的脚本?

batch-file - 如何在 BATCH 中打开已运行 Total Commander 的文件夹?

java - 函数调用的正则表达式模式

bash - PostgreSQL 从远程服务器将结果导出为 CSV

python psycopg2查询错误时间戳没有时区

windows - 批处理命令冲突

arguments - 批处理模式下的Stata命令行参数