Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 合并表的联合成本高,与服务器的连接丢失_Postgresql_Indexing_Merge_Union - Fatal编程技术网

Postgresql 合并表的联合成本高,与服务器的连接丢失

Postgresql 合并表的联合成本高,与服务器的连接丢失,postgresql,indexing,merge,union,Postgresql,Indexing,Merge,Union,我正在尝试创建一个新表,作为两个具有相同列的现有表的所有行的并集: CREATE TABLE table3 AS (SELECT * from table1 UNION SELECT * from table2); 运行一段时间后,我得到“与服务器的连接已丢失” 运行EXPLAIN,操作成本相当高: Unique (cost=51951688.65..57110689.45 rows=257950040 width=36) -> Sort (cost=51951688.65..

我正在尝试创建一个新表,作为两个具有相同列的现有表的所有行的
并集

CREATE TABLE table3 AS
(SELECT * from table1
UNION
SELECT * from table2);
运行一段时间后,我得到“与服务器的连接已丢失” 运行
EXPLAIN
,操作成本相当高:

Unique  (cost=51951688.65..57110689.45 rows=257950040 width=36)
  ->  Sort  (cost=51951688.65..52596563.75 rows=257950040 width=36)
        Sort Key: table1.id, table1.stid, table1.e5, table1.e10, table1.diesel, table1.date, table1.changed
        ->  Append  (cost=0.00..8859500.00 rows=257950040 width=36)
              ->  Seq Scan on gas_prices  (cost=0.00..1282341.56 rows=66285256 width=36)
              ->  Seq Scan on gas_prices_1620  (cost=0.00..3707907.84 rows=191664784 width=36)
JIT:
  Functions: 1
  Options: Inlining true, Optimization true, Expressions true, Deforming true
所以排序占用了很多资源。 我在postgresql.conf中设置了高于默认值的内存设置,但我只在一个内存为16gb的系统上运行。 我怀疑对现有表重新编制索引可能会有所帮助,但是我不确定要创建哪个索引。两个表上都没有私钥:没有一个或多个列的组合是唯一的(一次所有列除外)


我怎样才能使查询正常工作?谢谢您的帮助。

使用UNION ALL而不是UNION

致以最诚挚的问候,

比亚尼

谢谢你的回答,它很有效!当我继续检查/删除新创建的表中的重复记录时,我不可能遇到同样的资源问题吗?好吧,你说的行都是不同的,它必须是一组有限的列,可以算作重复,这对你有利。你需要大量的记录才能有
group by。。。例如,具有…
扼流圈。