PostgreSQL 启动时会自动清理temporary-files directory

在使用数据库时,跑某些SQL的时候,如果work_mem内存不足会涉及一些临时空间的使用,比如排序,聚合,group by。
如果数据库突然crash了,或者某些原因未清除temp file。
数据库在重启的时候,会自动清理。

PostmasterMain(int argc, char *argv[])
  call
RemovePgTempFiles(void)
  call
RemovePgTempFilesInDir(const char *tmpdirname)

代码如下:
src/backend/storage/file/fd.c

/* Process one pgsql_tmp directory for RemovePgTempFiles */
static void
RemovePgTempFilesInDir(const char *tmpdirname)
{
    DIR        *temp_dir;
    struct dirent *temp_de;
    char        rm_path[MAXPGPATH];

    temp_dir = AllocateDir(tmpdirname);
    if (temp_dir == NULL)
    {
        /* anything except ENOENT is fishy */
        if (errno != ENOENT)
            elog(LOG,
                 "could not open temporary-files directory \"%s\": %m",
                 tmpdirname);
        return;
    }

    while ((temp_de = ReadDir(temp_dir, tmpdirname)) != NULL)
    {
        if (strcmp(temp_de->d_name, ".") == 0 ||
            strcmp(temp_de->d_name, "..") == 0)
            continue;

        snprintf(rm_path, sizeof(rm_path), "%s/%s",
                 tmpdirname, temp_de->d_name);

        if (strncmp(temp_de->d_name,
                    PG_TEMP_FILE_PREFIX,
                    strlen(PG_TEMP_FILE_PREFIX)) == 0)
            unlink(rm_path);    /* note we ignore any error */
        else
            elog(LOG,
                 "unexpected file found in temporary-files directory: \"%s\"",
                 rm_path);
    }

    FreeDir(temp_dir);
}
时间: 2024-10-31 02:51:46

PostgreSQL 启动时会自动清理temporary-files directory的相关文章

PostgreSQL on ECS SLA 流复制备库+秒级快照+PITR+自动清理

标签 PostgreSQL , ECS , 阿里云 , 部署 , 物理镜像 , 流复制 , 快照备份 , 备份验证 , 自动清理 背景 介绍在阿里云ECS环境中,实现一个非常简单,但是可用性和可靠性满足一般企业要求的PostgreSQL环境. 包括: 1.自动启动数据库 2.包括一个物理流复制备库 3.包括自动的秒级快照备份 4.包括自动备份集有效性验证 5.包括自动清理N天以前的备份集.归档文件 6.监控请自建 部署环境介绍 1.ECS 111.111.111.199 (主) 111.111.

Linux下自动清理大量文件的方案探究

  定期清理过期文件和垃圾文件,维持文件系统合理的空间使用率,是一个系统管理员的日常工作.对于中小规模文件系统而言,简单的系统命令或者脚本都就可以实现;但是对于拥有数亿甚至数十亿数文件的大型.超大型文件系统,文件清理就变成一项艰巨的任务.如果确定哪些文件需要被清理,怎样清理大批量文件,怎样确保清理性能,都是系统管理员需要解决的难题.本文探讨了 Linux 下大批量文件自动清理的相关命令和方法,以及实际操作中的最佳实践. 文件自动清理的需求 系统管理员的手中,管理着企业最有价值的资产--数据;而占

MySQL 自动清理binlog日志的方法_Mysql

说明: 开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理binlog日志 一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)'; #mysql 定时清理5天前的binlog mysql -u root

XP系统如何设置自动清理Temp文件夹

XP系统如何设置自动清理Temp文件夹   自动清理方法: 1.在D盘建立D:UserDataTEMP目录 02.右击"我的电脑","属性","高级",打开"环境变量"对话框,将用户变量和系统变量都改为D:UserDataTEMP. 03.新建一个文本文档,在里面写入两行代码: RD %TEMP% /S/Q MKDIR %TEMP% 然后另存为*.bat格式(比如CleanTEMP.bat),这样只要打开一下CleanTEMP

WinXP如何自动清理Temp文件夹以提高系统运行速度

  WinXP中的Temp文件夹也就是系统的临时文件夹,主要就是存储一些平时产生的临时文件,这些临时文件如果你没有及时清理,就会越积越多,浪费了磁盘的空间,还会对系统造成磁盘碎片,影响了系统的读写运行速度.如何清理这些Temp文件夹呢?也许你会用软件清理,但是软件本身也会造成Temp文件夹堆积,因此我们还应当学会手动清理. 自动清理方法: 1.在D盘建立D:UserDataTEMP目录 02.右击"我的电脑","属性","高级",打开"

win7如何设置关机时自动清理临时垃圾文件

  电脑在使用中会不断的产生大量系统文件和临时垃圾文件,这些垃圾文件如果不及时清理的话,不仅会占用很大的系统盘空间,还会直接影响到系统的运行速度,但很多用户在使用电脑之前都忽略对电脑的清理,久而久之电脑就变得越来越缓慢. 其实我们可以设置电脑在关机时自动清理临时文件,这样电脑就不会累积大量的临时垃圾文件,下面来看看Win7关机自动清理临时文件的操作方法. 第一步:创建一个自动清除临时文件的.bat文件. 1.开始 - 所有程序 - 附件 - 记事本; 2.在打开的记事本中输入:del 文件夹路径

win7 32位系统怎样设置能使其自动清理垃圾

  很多用户进行了win7 32位系统下载,在使用一段时间之后,就会有不少的系统和程序的垃圾文件.一般很多人都会建议文件夹来存储一些临时的文件,不要的时候及时进行清理,那么有没有好的方法可以让系统自动清理呢?下面就来看看win7 系统自动清理垃圾的具体设置方法吧. 1.打开电脑之后,在桌面上新建一个文本文档,然后直接将其打开,在里面输进去"del 文件夹路径 /q"等字符,然后点击"文件--另存为",如图: 2.这时候就会弹出一个窗口,在里面点击"桌面&q

电脑怎么设置关机自动清理某个指定文件夹?

  电脑怎么设置关机自动清理某个指定文件夹?希望一些文件在关机时,能够自动清理,尤其是一些临时保存的个人文档或图片,不希望在关机后,还保留在电脑上,下面分享设置方法. 1,先要在被删除文件的文件夹之外建一个文本文档,示例删除的是"2"文件夹下所有的图片,所以这个文本文档必须建在"2"文件夹之外,创建文档方法,在空白处右键->新建->文本文档. 2,然后打开这个文本文档,在编辑窗口输入"del 文件路径 /q"这样一条命令,本文中是要删

电脑关机时自动清理临时垃圾文件设置技巧

  电脑在使用中会不断的产生大量系统文件和临时垃圾文件,这些垃圾文件如果不及时清理的话,不仅会占用很大的系统盘空间,还会直接影响到系统的运行速度,但很多用户在使用电脑之前都忽略对电脑的清理,久而久之电脑就变得越来越缓慢. 其实我们可以设置电脑在关机时自动清理临时文件,这样电脑就不会累积大量的临时垃圾文件,下面来看看Win7关机自动清理临时文件的操作方法. 第一步:创建一个自动清除临时文件的.bat文件. 1.开始 - 所有程序 - 附件 - 记事本; 2.在打开的记事本中输入:del 文件夹路径