Postgres声称在驱动器空间不足,有充足的自由空间

时间:2012-07-19 15:24:16

标签: database postgresql amazon-ec2 hard-drive

我对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)?

1 个答案:

答案 0 :(得分:1)

如果主题是重复的,则联接将重复行组合。

E.g。

表1

  1. Subject1
  2. Subject1
  3. Subject1
  4. Subject2
  5. 表2

    1. Subject1
    2. Subject1
    3. Subject2
    4. Subject2
    5. Subject1为6小时,Subject2为2行(共8行)

      在最极端的情况下 - 主题完全相同 - 你将获得2亿2千万行。

      我认为这就是原因......