在linux上,我使用psql和输入重定向操作符将文件加载到数据库中。我想删除该文件,以释放一些磁盘空间。这会干扰负载吗?
psql mydatabase < myfile.sql &
rm myfile.sql
答案 0 :(得分:3)
在psql
完成之前,文件实际上不会从磁盘中删除。它将从目录中删除,因此不会出现,但文件将保留在磁盘上(使用空间),直到操作完成。
答案 1 :(得分:1)
在linux(以及大多数unix变体)中删除进程当前保持打开的文件将导致操作系统删除目录条目,但将文件本身保留在磁盘上,直到保持文件打开的最后一个进程关闭它为止,因此进程使用该文件可以愉快地工作,好像什么也没发生。
所以(1)你的脚本运行幸运巧合(shell在设置重定向之前也不会删除文件),以及(2)在psql
完成使用之前尝试删除文件实现的很少,因为文件仍会占用磁盘空间,直到psql
完成。
你可能想做的是:
(psql mydatabase < myfile.sql && rm myfile.sql) &
这就像在后台生成一个子shell,运行psql命令,返回后删除myfile.sql
。
&&
表示“运行左侧,只有成功(读取:返回退出状态0)才运行右侧”。这是一个常见的shell习语。