我对 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 的可用空间)?