在PostgreSQL数据库上运行批处理时,我遇到了空间问题。
但是,df -h
命令显示机器有足够的空间
下面是确切的错误
org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; ERROR: could not extend file "base/16388/16452": No space left on device
Hint: Check free disk space.
导致此问题的原因是什么?
修改
postgres数据目录为/var/opt/rh/rh-postgresql96/lib/pgsql/data
df -h /var/opt/rh/rh-postgresql96/lib/pgsql/data
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 100G 63G 38G 63% /
答案 0 :(得分:5)
很可能有一些查询会创建大型临时文件,这些文件会暂时填满您的硬盘。一旦查询完成(或已经失败),这些文件将被删除,因此文件系统在您查看时有足够的可用空间。
在context.WithCancel(r.Context())
中设置log_temp_files = 10240
(并重新加载)以记录超过10 MB的所有临时文件,然后您可以检查日志文件以查看这是否确实是原因。
尝试识别错误的查询并修复它们。
如果临时文件不是问题,可能是临时表。数据库会话结束时会自动删除它们。您的应用程序是否使用临时表?
另一种可能是由数据库以外的其他东西创建的文件。
答案 1 :(得分:0)
在这样的大型记录上尝试使用限制(例如100):
select .... from table .... limit (100);