1

在 linux 上,我使用 psql 和输入重定向运算符将文件加载到数据库中。我想删除该文件以释放一些磁盘空间。会不会影响负载?

psql mydatabase < myfile.sql &
rm myfile.sql
4

2 回答 2

3

在完成之前,该文件实际上不会从磁盘中删除psql。它将从目录中删除,因此不会出现,但文件将保留在磁盘上(用完空间),直到操作完成。

于 2012-04-05T15:48:24.770 回答
1

在 linux(和大多数 unix 变体)中,删除进程当前保持打开的文件将导致操作系统删除目录条目,但将文件本身保留在磁盘上,直到最后一个保持文件打开的进程将其关闭,因此使用该文件的进程可以像什么事都没发生一样愉快地工作。

所以(1)您的脚本是幸运的巧合(shell 在设置重定向之前也不会删除文件),并且(2)在psql完成使用它之前尝试删除文件几乎没有效果,因为文件仍然会占用磁盘空间直到psql完成。

你可能的意思是:

(psql mydatabase < myfile.sql && rm myfile.sql) &

这就像在后台生成一个子shell,它运行 psql 命令并在它返回remove之后myfile.sql

意思是“&&运行左侧,只有成功(读取:返回退出状态0)运行右侧”。这是一个常见的 shell 习惯用法。

于 2012-04-05T18:39:16.727 回答