database - Postgres 声称驱动器上的空间不足,可用空间充足

标签 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

  1. 主题 1
  2. 主题 1
  3. 主题 1
  4. 主题2

表2

  1. 主题 1
  2. 主题 1
  3. 主题2
  4. 主题2

Subject1 结果为 6 小时,Subject2 为 2 行(总共 8 行)

在最极端的情况下 - 主题完全相同 - 你会得到 2 亿 * 2 亿行。

我想是因为...

关于database - Postgres 声称驱动器上的空间不足,可用空间充足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564060/

相关文章:

azure - 无法 ping 通 Windows Azure 外部的虚拟机

c# - 从数据库表中删除行

SQLite 仅当表存在时删除

postgresql - 我如何从 PostgreSQL 中的 VARCHAR 获取 Unicode 值?

sql - 使用来自三层嵌套表的聚合列创建 View

java - 在不重启服务器的情况下部署到 tomcat7

mysql - 从每个对话中获取最后一条消息

mysql - 将 html 页面存储在 Mysql 数据库或文件中

postgresql - 选择不同的 generate_series postgresql

mysql - 带 Spring Boot 的 EC2 或 Azure