【问题标题】:Sql memory issueSql 内存问题
【发布时间】:2020-12-22 20:54:56
【问题描述】:

我创建了一个新的 postgres 服务器,当我尝试执行这个 sql 命令时:

 DROP TABLE IF EXISTS table_3;
 CREATE TABLE table_3 AS
    SELECT 
       t1.id,
       t1.fild_2,
       t1.fild_3,
       t1.fild_4,
       t1.fild_5,
       t2.fild_6,
       t2.fild_7,
       t2.fild_8
  FROM table1 t1
       RIGHT JOIN  table2 t2 
       ON t1.id = t2.id

table1 和 table2 包含大约 300 000 条记录 我收到这样的错误:

ERROR:  could not extend file "base/367684/370837.16": wrote only 4096 of 8192 bytes at block 2182494
HINT:  Check free disk space.
SQL state: 53100

有什么想法吗?

问候, 小臂

【问题讨论】:

  • 也许您应该检查可用磁盘空间? HINT: Check free disk space.??
  • 这不是“内存”问题,而是磁盘空间问题。存储 Postgres 数据库的硬盘已满。
  • @a_horse_with_no_name 所以我需要清理磁盘空间?还是什么?

标签: sql postgresql


【解决方案1】:

您的join 条件可能不正确。您可以使用以下方法计算有多少行:

select sum(t2.cnt * coalesce(t1.cnt, 1))
from (select t2.id, count(*) as cnt
      from table2 t2
      group by t2.id
     ) t2 left join
     (select t1.id, count(*) as cnt
      from table1 t1
      group by t1
     ) t1
     on t1.id = t2.id;

我的猜测是行数比您预期的要大得多。如果是这种情况,则可用空间不足只是查询格式错误的症状。

但是,如果此版本的查询空间不足,那么问题就出在可用空间上。

【讨论】:

  • 非常感谢,我的sql产生了4亿多条数据
  • @Arrmlet 。 . .如果您从每个表中只有几十万行开始,听起来像您的联接。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2014-12-19
  • 2021-10-06
相关资源
最近更新 更多