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