我对Postgres比较陌生,但是我遇到了一个奇怪的错误,谷歌搜索没有出现任何问题。
我创建了两个(相对较大的)表,每个表大约有2亿行。第一行有4行,第二行有3行。它们每个都在每列中存储varchars。
我正在尝试通过连接两个表并选择三个结果列来创建第三个表。查询是:
create table table_C as
(select table_A.id as id, table_A.predicate, table_B.object as type
from table_A join table_B on
table_A.subject = table_B.subject);
查询运行大约10个小时,然后中止说
ERROR: could not extend file "base/446695/504075.302": No space left on device
HINT: Check free disk space.
我在带有64GB内存的Amazon EC2实例上运行此操作,并且我的数据库存储在一个大小为500GB的卷上。我意识到结果表应该很大,但原来的两个表只占用不到100GB,所以如果一个有两列的表占用的空间超过5倍,那就太奇怪了。我已经尝试了大约4次,并尝试重新启动实例。
我仔细检查了数据目录和pg_stats_tmp文件是否指向正确的卷。 (postgres.conf中的“data_dir”和“pg_stat_tmp”设置)。
有什么想法?是否有其他临时文件可能会在某处膨胀(根卷无论如何都超过150GB)?
答案 0 :(得分:1)
如果主题是重复的,则联接将重复行组合。
E.g。
表1
表2
Subject1为6小时,Subject2为2行(共8行)
在最极端的情况下 - 主题完全相同 - 你将获得2亿2千万行。
我认为这就是原因......