PostgreSQL更换表空间后插入数据仍报磁盘不足及库大小与备份不符问题
问题1:操作后仍提示磁盘空间不足的原因
报错信息里的临时文件路径属于当前数据库绑定表空间的专属临时目录,并非系统全局的/pgsql_temp,你排查的路径有误,核心原因有两类:
- 首先确认表空间的实际挂载分区:报错路径中的表空间OID为226475,执行SQL
select pg_tablespace_location(226475);获取对应的物理存储路径,再执行df -h查看该路径所属磁盘分区的实际可用空间,大概率是你创建表空间时路径配置错误,软链接实际指向了空间不足的旧磁盘分区,而非你以为的50GB可用新分区。 - 排查inode占用:如果磁盘块确实有可用空间,执行
df -i检查对应分区的inode使用率,inode耗尽也会触发空间不足报错。 - 补充说明:PostgreSQL会在操作报错后自动清理临时文件,所以你事后查看
pgsql_tmp目录为空属于正常现象,如需复现确认可以在执行大数据量操作的同时实时监控对应分区的占用变化。
问题2:备份文件大小和实际数据库大小不一致的原因
两者统计逻辑完全不同,出现差异属于正常情况,核心原因如下:
.sql属于逻辑备份文件,仅包含数据的INSERT语句、索引/约束的创建语句,不包含索引的物理存储数据、数据库元数据、页预留空间等内容,恢复时索引需要重新生成,会产生大量额外物理占用。- PostgreSQL的物理存储有额外开销:所有数据按8KB默认页大小对齐存储,每行数据包含MVCC所需的行头信息,大字段会存入TOAST表产生额外占用,同时
pg_database_size的统计范围包含了整个数据库的表、索引、系统表、预分配的WAL日志空间,这些都不会计入逻辑备份文件的大小。 - 你当前6.8GB备份恢复后生成9.3GB的物理数据库属于正常区间,没有异常。
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

